欢迎来到天天文库
浏览记录
ID:39970282
大小:603.50 KB
页数:21页
时间:2019-07-16
《linux下套接字编程》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Linux套接字编程套接字是一种进程间通信的方法,不同于以往介绍的进程间通信方法的是,它并不局限于同一台计算机的资源,除了可以在本地运行,还可以在网络中运行。套接字接口(socketinterface)由伯克利版本UNIX引入,可以认为是对管道概念的扩展——一台机器上的进程可以使用套接字与另一台机器上的进程通信。因此客户与服务器可以分散到网络中。同一台机器的进程间也可以用套接字通信。套接字概念微软的windows系统也通过可公开获取的windowssocket技术规范实现了套接字接口,因此windows程序可以通过网络和Linux/UNIX计算机进行通信,实现客户/服务器系统,反
2、之亦然。创建套接字#include#include返回套接字描述符intsocket(intdomain,inttype,intprotocol);domain:域type:指定套接字的通信类型protocol:指定使用的协议域(Domain)指定套接字通信中使用的网络介质,包括地址格式。最常用的有以下两种:AF_INET,即互联网络,基于IP协议,并且每个服务对应一个端口号,套接字地址由IP地址+端口号决定;AF_UNIX,基于本地机器,底层协议使用文件输入/输出,地址为绝对路径的文件名。类型(Type)流套接字:由类型SO
3、CK_STREAM指定,基于TCP/IP实现,提供一个有序、可靠、双向字节流的连接,发送的数据不会丢失、乱序、重复。大的消息会被分块、传输、重组,很像一个文件流。数据报套接字:由SOCK_DGRAM指定,基于UDP/IP协议,不建立和维持可靠连接,开销小。协议(protocol)我们重点讨论UNIX网络套接字和文件系统套接字,不需要选择特定协议,只要默认值(0)即可。命名套接字#includeintbind(intsocket,conststructsockaddr*address,size_taddress_len);其中,socket是套接字的标示
4、符。address是套接字地址。address_len是地址长度。套接字地址AF_UNIX:地址格式由sockaddr_un来描述structsockaddr_un{sa_family_tsun_familycharsun_path[];}AF_INET:地址格式由sockaddr_in来指定structsockaddr_in{shortintsin_family;unsignedshortintsin_port;structin_addrsin_addr;}四字节IP地址创建套接字队列#includeIntlisten(intsocket,intba
5、cklog);套接字队列中,等待处理的进入连接的个数最多不能超过backlog这个数字,多出的连接请求将被拒绝,导致客户连接失败。当服务器正忙于处理一个客户请求时,后续的客户连接放入队列等待处理。函数执行成功返回0,失败返回-1.接受连接#includeintaccept(intsocket,structsockaddr*address,size_t*address_len);连接客户的地址将被放入address参数指向的sockaddr结构中。address_len指定客户结构的长度,如果客户地址的长度超出这个值将被截断,所以必须先得到这个合适的值。
6、请求连接#includeintconnect(intsocket,structsockaddr*address,size_taddress_len);参数socket指定的套接字将连接到参数address指定的服务器套接字,address指向的结构长度由参数address_len指定。关闭套接字可以通过close函数终止服务器和客户上的套接字连接,操作过程与对文件描述符进行关闭一样。Server.c头文件与变量声明#include#include#include#include7、ys/un.h>#include#includeintmain(){intserver_sockfd,client_sockfd;intserver_len,client_len;structsockaddr_unserveraddress;structsockaddr_unclientaddress;Server.c删除以前的套接字,为服务器创建一个未命名的套接字unlink(“server_socket”);server_sockfd=
7、ys/un.h>#include#includeintmain(){intserver_sockfd,client_sockfd;intserver_len,client_len;structsockaddr_unserveraddress;structsockaddr_unclientaddress;Server.c删除以前的套接字,为服务器创建一个未命名的套接字unlink(“server_socket”);server_sockfd=
此文档下载收益归作者所有