Linux下套接字编程.ppt_第1页
Linux下套接字编程.ppt_第2页
Linux下套接字编程.ppt_第3页
Linux下套接字编程.ppt_第4页
Linux下套接字编程.ppt_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Linux套接字编程,套接字是一种进程间通信的方法,不同于以往介绍的进程间通信方法的是,它并不局限于同一台计算机的资源,除了可以在本地运行,还可以在网络中运行。 套接字接口(socket interface)由伯克利版本UNIX引入,可以认为是对管道概念的扩展一台机器上的进程可以使用套接字与另一台机器上的进程通信。因此客户与服务器可以分散到网络中。 同一台机器的进程间也可以用套接字通信。,套接字概念,微软的windows系统也通过可公开获取的windows socket技术规范实现了套接字接口,因此windows程序可以通过网络和Linux/UNIX计算机进行通信,实现客户/服务器系统,反之亦然。,创建套接字,#include #include 返回套接字描述符 int socket( int domain, int type, int protocol); domain:域 type:指定套接字的通信类型 protocol:指定使用的协议,域(Domain),指定套接字通信中使用的网络介质,包括地址格式。最常用的有以下两种: AF_INET,即互联网络,基于IP协议,并且每个服务对应一个端口号,套接字地址由IP地址+端口号决定; AF_UNIX,基于本地机器,底层协议使用文件输入/输出,地址为绝对路径的文件名。,类型(Type),流套接字:由类型SOCK_STREAM指定,基于TCP/IP实现,提供一个有序、可靠、双向字节流的连接,发送的数据不会丢失、乱序、重复。大的消息会被分块、传输、重组,很像一个文件流。 数据报套接字:由SOCK_DGRAM指定,基于UDP/IP协议,不建立和维持可靠连接,开销小。,协议(protocol),我们重点讨论UNIX网络套接字和文件系统套接字,不需要选择特定协议,只要默认值(0)即可。,命名套接字,#include int bind( int socket, const struct sockaddr* address, size_t address_len); 其中,socket是套接字的标示符。address是套接字地址。address_len是地址长度。,套接字地址,AF_UNIX:地址格式由sockaddr_un来描述 struct sockaddr_un sa_family_t sun_family char sun_path; AF_INET:地址格式由sockaddr_in来指定 struct sockaddr_in short int sin_family; unsigned short intsin_port; structin_addrsin_addr; ,四字节IP地址,创建套接字队列,#include Int listen( int socket, int backlog); 套接字队列中,等待处理的进入连接的个数最多不能超过backlog这个数字,多出的连接请求将被拒绝,导致客户连接失败。 当服务器正忙于处理一个客户请求时,后续的客户连接放入队列等待处理。函数执行成功返回0,失败返回-1.,接受连接,#include int accept( int socket, struct sockaddr* address, size_t* address_len); 连接客户的地址将被放入address参数指向的sockaddr结构中。 address_len指定客户结构的长度,如果客户地址的长度超出这个值将被截断,所以必须先得到这个合适的值。,请求连接,#include int connect( int socket, struct sockaddr* address, size_t address_len); 参数socket指定的套接字将连接到参数address指定的服务器套接字,address指向的结构长度由参数address_len指定。,关闭套接字,可以通过close函数终止服务器和客户上的套接字连接,操作过程与对文件描述符进行关闭一样。,Server.c,头文件与变量声明 #include #include #include #include #include #include int main() int server_sockfd,client_sockfd; int server_len,client_len; struct sockaddr_un server address; struct sockaddr_un client address;,Server.c,删除以前的套接字,为服务器创建一个未命名的套接字 unlink(“server_socket”); server_sockfd=socket(AF_UNIX,SOCK_STREAM,0); 命名套接字 server_address.sun_family = AF_UNIX; strcpy(server_address.sun_path,”server_socket”); server_len=sizeof(server_address); bind(server_sockfd,(struct sockaddr *),Server.c,创建一个连接队列,开始等待客户进行连接 listen(server_sockfd,5); while(1) char ch; printf(“server waitingn”); 接受一个连接 client_len=sizeof(client_address); client_sockfd=accept(server_sockfd,(struct sockaddr *),Server.c,对客户进行读写操作 read(client_sockfd, ,Client.c,头文件与变量声明 #include #include #include #include #include #include int main() int sockfd; int len; struct sockaddr_un address; char ch=A;,Client.c,为客户创建一个套接字 sockfd=socket(AF_UNIX,SOCK_STREAM,0); 根据服务器的情况对套接字命名 address.sun_family=AF_UNIX; strcpy(address.sun_puth,”server_socket”); len=sizeof(address); 将客户端套接字连接到服务器端套接字 connect(sockfd,(struct sockaddr*),Client.c,通过so

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论