Linux下Socket编程.docx
《Linux下Socket编程.docx》由会员分享,可在线阅读,更多相关《Linux下Socket编程.docx(36页珍藏版)》请在第壹文秘上搜索。
1、端以及面对连接SOCkel的服务端通过调用bind函数来配践本地信息。Bind函数将SOCket及本机上的一个端口相关联,随后你就可以在该端口监听服务恳求。Bind函数原型为:inibind(intsockd,structsockaddr*myaddr,intUddrIen);Sockfd是调用SOCket函数返回的SOCkel描述符,my_addr是一个指向包含有本机IP地址及端口号等信息的sockaddr类型的指针:addrlen常被设置为sizeof(structSOCkaddr)OstructSOCkaddr结构类型是用来保存SoCket信息的:structsockaddrunsign
2、edshortsa_famiIy:*地址族,FXXX*/charsa-data14:*14字节的协议地址*/):safamily一般为AFINET,代表Internet(TCP/IP)地址族:Sadalu则包含该SOCkel的IP地址和端口号。另外还有种结构类型:structSOCkaddJinshortintsinamiIy;/地址族*/unsignedshortintsin_port;/端口号*/structin_addrsin_addr:*IP地址*/unsignedcharsin-zero8;*填充0以保持及StrUCtSoCkaddr同样大小/;这个结构更便利运用。Sin_Zero用
3、来将SoCkaddrin结构填充到及StrUCtSoCkaddr同样的长度,可以用bzerc。或memset()函数将其置为零.指向SOCkaddrin的指针和指向SoCkUddr的指针可以相互转换,这意味若假如一个函数所需参数类型是sockaddr时,你可以在函数调用的时候将一个指向sockaddrin的指针转换为指向sockaddr的指针:或者相反。运用bind函数时,可以用下面的赋值实现自动获得本机IP地址和随机获得一个没有被占用的端口号:my_addr.sin_port-0;/*系统随机选择一个未被运用的端口号*/my_addr.sin_addr.s_addr=1NADDR_ANY:*
4、填入本机IP地址*/通过将my_addr.Sin_POrt置为0,函数会自动为你选择一个未占用的湍口来运用.同样,通过将myaddr.sinaddr.saddr置为INADDRANY,系统会自动城入本机IP地址。用意在运用bind函数是须要将sin_port和Sin_addr转换成为网络字节优先依次;而sinaddr则不须要转换。计算机数据存储有两种字节优先依次:高位字节优先和低位字节优先。Internet上数据以高位字节优先依次在网络上传输,所以对于在内部是以低位字节优先方式存储数据的机器,在Internet上传输数据时就须要进行转换,否则就会出现数据不一样。下面是儿个字节依次转换函数: h
5、tonlO:把32位值从主机字节序转换成网络字节序 hlons():把16位值从主机字节序转换成网络字节序ntohl():把32位值从网络字节序转换成主机字节序 ntohs():把16位值从网络字节序转换成主机字节序Bindo函数在胜利被调用时返回0:出现错误时返回并将”皿。置为相应的错误号。须要留意的是,在调用bind函数时一般不要将端口号置.为小于1024的值,因为1到1024是保留端口号,你可以选择大于1024中的任何一个没有被占用的端口号。连接建立面对连接的客户程序运用Connect函数来配置socket并及远端服务器建立一个TCP连接,其函数原型为:intconnect(intsoc
6、kfd,structsockaddr*servaddr,intaddrlen);Sockfd是socket函数返回的SoCket描述符:serv_addr是包含远端主机IP地址和端口号的指针:addrlen是远端地质结构的长度。Connect函数在出现错误时返回T,并且设置errno为相应的错误码。进行客户端程序设计无须调用bind。,因为这种状况下只需知道目的机器的IP地址,而客户通过哪个湍口及服务器建立连接并不须要关切,SOCket执行体为你的程序自动选择一个未被占用的端口,并通知你的程序数据什么时候到打断口。Connect函数启动和远端主机的干脆连接。只有面对连接的客户程序运用socke
7、t时才须要将此SoCket及远端主机相连。无连接协议从不建立干脆连接.面对连接的服务器也从不启动一个连接,它只是被动的在协议端口监听客户的恳求。1.isten函数使SOCket处于被动的监听模式,并为该socket建立一个输入数据队列,将到达的服务恳求保存在此队列中,直到程序处理它们。int1isten(intsockfd,intbacklog);Sockfd是Socket系统调用返回的socket描述符:backlog指定在恳求队列中允许的最大恳求数,进入的连接恳求将在队列中等待accept。它们(参考下文).BaCkIOg对队列中等待服务的恳求的数目进行了限制,大多数系统缺省值为20。假如
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Linux Socket 编程
