资源描述:
《Unix Socket编程》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、UnixSocket编程.Socket Socket是TCP/IP网络的API,可以用它来开发网络应用程序 Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符.Socket的建立 intsocket(intdomain, inttype, intprotocol) 函数返回: 一个整型的Socket描述符,可以在后面调用它 参数说明: intdomain 指明所使用的协议族,通常是PF_INET,表示网络(TCP/IP)协议族 说明我们网络程序
2、所在的主机采用的通讯协族(AF_UNIX和AF_INET等). AF_UNIX: 只能够用于单一的Unix系统进程间通信, AF_INET: 是针对Internet的,因而可以允许在远程主机之间通信 (当我们mansocket时发现domain可选项是PF_*而不是AF_*,因为glibc是posix的实现所以用PF代替了AF,不过我们都可以使用的) inttype 指定socket的类型,通常是SOCK_STREAM流式Socket这样会提供按顺序的,可靠,双向,面向连接的
3、比特流和SOCK_DGRAM数据报式Socket这样只会提供定长的,不可靠,无连接的通信 intprottocol 通常为0由于我们指定了type,所以这个地方我们一般只要用0来代替就可以了 应用示例: intsockfd=socket(PF_INET, SOCK_STREAM,0);.Socket配置 Socket描述符是一个指向内部数据结构的指针,它指向描述符表入口。调用Socket函数时,socket执行体将建立一个Socket,实际上"建立一个Socket"意味着为一个Socket数据结构分配存储空间。S
4、ocket执行体为你管理描述符表。 两个网络程序之间的一个网络连接包括五种信息:通信协议、本地协议地址、本地主机端口、远端主机地址和远端协议端口。Socket数据结构中包含这五种信息。 通过socket调用返回一个socket描述符后,在使用socket进行网络传输以前,必须配置该socket: 1)面向连接的socket客户端通过调用Connect函数在socket数据结构中保存本地和远端信息。 2)无连接socket的客户端和服务端以及面向连接socket的服务端通过调用bind函数来配置本地信息。 Bind函数将socke
5、t与本机上的一个端口相关联,随后你就可以在该端口监听服务请求。 Bind函数原型为: intbind(intsockfd,structsockaddr*my_addr,intaddrlen);Bind()函数在成功被调用时返回0;出现错误时返回"-1"并将errno置为相应的错误号。 Sockfd 是调用socket函数返回的socket描述符, my_addr 是一个指向包含有本机IP地址及端口号等信息的sockaddr类型的指针; addrlen 常被设置为sizeof(structsocka
6、ddr)。 1)structsockaddr结构类型是用来保存socket信息的: structsockaddr { unsignedshortsa_family; /*地址族,AF_xxx*/ charsa_data[14]; /*14字节的协议地址*/ }; sa_family 一般为AF_INET,代表Internet(TCP/IP)地址族; sa_data 则包含该socket的IP地址和端口号
7、。 2)sockaddr_in结构类型: structsockaddr_in { shortintsin_family; /*地址族*/ unsignedshortintsin_port; /*端口号*/ structin_addrsin_addr; /*IP地址*/ unsignedcharsin_zero[8]; /*填充0以保持与structsockaddr同样大小sin_zero用来将sockaddr_in结构填充到与st
8、ructsockaddr同样的长度,可以用bzero()或memset()函数将其置为零。*/ }; 这个结构更