套接字,sip.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
套接字,sip

本周主要学习了Windows套接字socket的使用,进行了简单的代码编写与调试。会话初始协议(SIP)的工作原理。一.主要学习内容1Windows套接字socket2会话初始协议(SIP)二.主要收获1.socket相关知识:socket是应用层到传输层的接口。传输层协议TCP和UDP在进行多个应用程序的数据传输时,使用套接字来进行区别。流套接字:双向、有序、无重复数据包套接字:双向、无序、有重复套接字SOCKET的声明如下#define unsigned int u_int;#define u_int SOCKET无效套接字:INVALID_SOCKET, #define INVALID_SOCKET (SOCKET)0 [0,INVALID_SOCKET-1]是有效套接字的范围。2.面向连接和面向无连接服务网络服务的两种方式。面向连接:发送数据源主机必须首先与目的主机连接。连接通过三次握手完成。建立连接需要很多开支,花费时间能保证数据的可靠性TCP、SPX、NetBios、CMNP面向无连接:发送源主机无需与目的主机连接,直接发送。无连接。没有连接开销可能会出现丢包,数据到达顺序混乱无法保证数据的可靠性。IP、IPX、CLNP3. IP定址TCP和UDP都通过IP协议进行数据传输,Windows中通过AF_INET地址家族为IP定址。使用SOCKADDR_IN来指定IP地址和端口号:struct socket_in{short sin_family;//地址家族u_shortsin_port//端口号struct in_addrsin_addr//in_addr类型的IP地址charsin_zero[8]//填充字段,保证与SOCKADDR结构一致};typedef socket_in SOCKET_IN;对于网络字节序与本机字节序不同的问题,提供htons、htonl、ntohl和ntohs函数进行映射。4. Windows socket编程的基本步骤配置开发环境(以VS2013为例)开发Windows套接字程序必须包含Windows socket头文件:WINSOCK2.h。并导入wsock32.lib的方法与之前加载DLL时添加LIB文件一致。加载WS2_32.DLLintWSAStartup(WORD, LPWSADATA);WSADATA wsadata;WSAStartup(MAKEWORD(2,2),wsadata);//指定使用Windows Socket2.2版本。创建套接字SOCKETsocket( intaf; //创建TCP或者UDP协议时,该参数必须为AF_INET inttype; //套接字类型:SOCK_STREAM、SOCK_DGREAM、 SOCK_RAM intprotocol //协议类型,SOCK_STREAM对应IPPROTO_TCP或者 0,SOCK_DGREAM对应IPPROTO_UDP或者0);绑定套接字intbind( SOCKET//需要绑定的套接字 const struct socket_addr FAR* name;//地址 int namelen;//地址长度);name.sin_family = AF_INET;name.sin_addr.S_addr = htons(INADDR_ANY); //应用不关心地址,使用任意分配的地址。name.sin_port = htons(SERVERPORT);监听套接字intlisten( SOCKETs; //需要监听的套接字 intbacklog//指定等待连接的最大长度)连接服务器(客户端)intconnect( SOCKET//用于连接的套接字 const struct socket_addr FAR* name;//服务器地址 int namelen;//地址长度);与bind函数大致一样。接收客户端连接(服务器)SOCKETaccept( SOCKETs; struct socket_addr FAR* addr; //返回请求连接的主机地址 int addr_len; //地址长度)接收数据int recv( SOCKETs; charbuf; //接收缓冲区 intlen; //缓冲区长度 intflags//影响函数的行为,0表示无行为;MSG_PEEK可以实现定位读取:先读一部分,再从已读取数据的末尾,继续调用recv读取剩余部分。在这个过程中MSG_PEEK不会删除系统缓存数据,如

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档