winsock api 选项配置

winsock api 选项配置

ID:23870025

大小:50.50 KB

页数:5页

时间:2018-11-11

winsock api 选项配置_第1页
winsock api 选项配置_第2页
winsock api 选项配置_第3页
winsock api 选项配置_第4页
winsock api 选项配置_第5页
资源描述:

《winsock api 选项配置》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、WinsockAPI选项配置摘要 介绍了icrosoft联合了其他几家公司共同制定了一套,当套接字为数据报类型时,type应设置为SOCK_DGRAM,如果是可以直接访问IP协议的原始套接字则type应设置为SOCK_RAily;/*addresstype*/charsa_data[14];/*protocoladdress*/}其中sa_family意指套接字使用的协议族地址类型,对于一般的TCP/IP网络,其值应该是AF_I,sa_data是存储地址协议信息的数组,不同的协议族有不同的地址,但是都可以存在这个通用的结构体里面,通常的做法是将不同的协议转换成相同

2、的协议地址,然后再进行通讯。用于TCP/IP协议族的套接字地址结构是sockaddr_in,其定义为:structsockaddr_in{shortsin_family;unsignedshortsin_port;IN_ADDRsin_addr;charsin_zero[8];};其中sin_zero成员并未使用,它是为了和通用套接字地址structsockaddr兼容性而设定的。在编程中,一般都通过bzero()或是memset()将其置零。servaddr.sin_family=AF_I;表示套接字使用TCP/IP协议族。servaddr.sin_addr.s

3、_addr=htonl(INADDR_ANY);设置服务器套接字的IP地址为特殊值INADDR_ANY,表示服务器愿意接收来自任何网络设备接口的客户机连接。htonl()函数将主机顺序的字节转换成网络顺序的字节。servaddr.sin_port=htons(PORT);设置通信端口号,PORT即用于通讯的端口号。3.2bind()将一本地地址与一套接字捆绑。intbind(SOCKETs,conststructsockaddr*name,intnamelen);s:未绑定的套接字。name:套接字地址。sockaddr结构定义如下:structsockaddr{

4、u_shortsa_family;charsa_data[14];};namelen:name名字的长度。本函数适用于未连接的数据报或流类套接字,在listen()调用前使用。当用socket()创建套接字后,它便存在于一个名字空间(地址族)中,但并未赋名。bind()函数通过给一个未命名套接字分配一个本地名字来为套接字建立本地捆绑。如果端口号置为0,则e()来获知所分配的地址,但getsockname()只有在套接字连接成功后才会正确的得到分配的地址。3.3listen()intlisten(intsockfd,intbacklog);参数sockfd指定要求转

5、换的套接字描述符,参数backlog设置请求队列的最大长度。函数listen()主要完成以下操作:  首先是将套接字转换成监听套接字。客户机可以通过调用函数connect()来使用这样的套接字主动和服务器建立连接。而listen()可将一个服务端尚未连接的主动套接字转换成为这样的"被动"套接字,也就是监听套接字。在执行了listen()函数之后,服务器的TCP就由CLOSED变成LISTEN状态了。另外listen()可以设置连接请求队列的最大长度。TCP协议为每个倾听套接字实际上维护两个队列,一个是未完成连接队列,这个队列中的成员都是未完成3次握手的连接;另一个

6、是完成连接队列,这个队列中的成员都是虽然已经完成了3次握手,但是它是还未被服务器调用accept()接收的连接。参数backlog指定的是这个倾听套接字完成连接队列的最大长度。3.4accept()intaccept(intsockfd,structsockaddr*addr,int*addrlen);参数sockfd是转换成功并且得到的倾听套接字;参数addr是一个指向套接字地址结构的指针,参数addrlen为一个整型指针。当函数成功执行时,返回3个结果,函数返回一个新的套接字,即接收套接字,服务器可以通过这个新的套接字描述符和客户机进行通信。参数addr所指向

7、的套接字地址结构中将存放客户机的相关信息,addrlen指针将描述前述套接字地址结构的长度。在通常情况下程序服务端对后面两个参数信息不是很感兴趣,我们可以忽略他们,因此通常我们将accept()函数的后两个参数都设置为NULL。3.5connect()intconnect(intsockfd,structsockaddr*servaddr,intaddrlen);参数sockfd是调用函数socket()返回的套接字描述符,参数servaddr指向远程服务器的套接字地址结构,参数addrlen指定这个套接字地址结构的长度。函数connect()执行成功时返回"0"

8、,如果执行

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。