Linux进程间通信9——使用数据报套接字.doc

Linux进程间通信9——使用数据报套接字.doc

ID:57609745

大小:137.55 KB

页数:7页

时间:2020-08-28

Linux进程间通信9——使用数据报套接字.doc_第1页
Linux进程间通信9——使用数据报套接字.doc_第2页
Linux进程间通信9——使用数据报套接字.doc_第3页
Linux进程间通信9——使用数据报套接字.doc_第4页
Linux进程间通信9——使用数据报套接字.doc_第5页
资源描述:

《Linux进程间通信9——使用数据报套接字.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、前一篇文章,Linux进程间通信——使用流套接字介绍了一些有关socket(套接字)的一些基本内容,并讲解了流套接字的使用,这篇文章将会给大家讲讲,数据报套接字的使用。一、简单回顾——什么是数据报套接字。socket,即套接字是一种通信机制,凭借这种机制,客户/服务器(即要进行通信的进程)系统的开发工作既可以在本地单机上进行,也可以跨网络进行。也就是说它可以让不在同一台计算机但通过网络连接计算机上的进程进行通信。也因为这样,套接字明确地将客户端和服务器区分开来。相对于流套接字,数据报套接字的使用更为简单,它是由类

2、型SOCK_DGRAM指定的,它不需要建立连接和维持一个连接,它们在AF_INET中通常是通过UDP/IP协议实现的。它对可以发送的数据的长度有限制,数据报作为一个单独的网络消息被传输,它可能会丢失、复制或错乱到达,UDP不是一个可靠的协议,但是它的速度比较高,因为它并不需要总是要建立和维持一个连接。二、基于流套接字的客户/服务器的工作流程使用数据报socket进行进程通信的进程采用的客户/服务器系统是如何工作的呢?1、服务器端与使用流套接字一样,首先服务器应用程序用系统调用socket来创建一个套接安,它是系统

3、分配给该服务器进程的类似文件描述符的资源,它不能与其他的进程共享。接下来,服务器进程会给套接字起个名字(监听),我们使用系统调用bind来给套接字命名。然后服务器进程就开始等待客户连接到这个套接字。不同的是,然后系统调用recvfrom来接收来自客户程序发送过来的数据。服务器程序对数据进行相应的处理,再通过系统调用sendto把处理后的数据发送回客户程序。与流套接字程序相比:1、在流套接字中的程序中,接收数据是通过系统调用read,而发送数据是通过系统调用write来实现,而在数据报套接字程序中,这是通过recv

4、from和sendto调用来实现的。2、使用数据报套接字的服务器程序并不需要listen调用来创建一个队列来存储连接,也不需要accept调用来接收连接并创建一个新的socket描述符2、客户端基于数据报socket的客户端比服务器端简单,同样,客户应用程序首先调用socket来创建一个未命名的套接字,与服务器一样,客户也是通过sendto和recvfrom来向服务器发送数据和从服务器程序接收数据。与流套接字程序相比:使用数据报套接字的客户程序并不需要使用connect系统调用来连接服务器程序,它只要在需要时向服

5、务器所监听的IP端口发送信息和接收从服务器发送回来的数据即可。三、数据报socket的接口及作用socket的接口函数声明在头文件sys/types.h和sys/socket.h中。1、创建套接字——socket系统调用该函数用来创建一个套接字,并返回一个描述符,该描述符可以用来访问该套接字,它的原型如下:1.int socket(int domain, int type, int protocol);  函数中的三个参数分别对应前面所说的三个套接字属性。protocol参数设置为0表示使用默认协议。2、命名(绑

6、定)套接字——bind系统调用该函数把通过socket调用创建的套接字命名,从而让它可以被其他进程使用。对于AF_UNIX,调用该函数后套接字就会关联到一个文件系统路径名,对于AF_INET,则会关联到一个IP端口号。函数原型如下:1.int bind( int socket, const struct sockaddr address, size_t address_len);  成功时返回0,失败时返回-1;3、发送数据——sendto系统调用该函数把缓冲区buffer中的信息给送给指定的IP端口的程序,原型

7、如下:1.int sendto(int sockfd, void buffer, size_t len, int flags, struct sockaddr to, socklen_t tolen);  buffer中储存着将要发送的数据,len是buffer的长度,而flags在应用中通常被设置为0,to是要发送数据到的程序的IP端口,tolen是to参数的长度。成功时返回发送的数据的字节数,失败时返回-1.4、接收数据——recvfrom系统调用该函数把发送给程序的信息储存在缓冲区buffer中,并记录数据

8、来源的程序IP端口,原型如下:1.int recvfrom(int sockfd, void buffer, size_t len,int flags, struct sockaddr src_from, socklen_t src_len);  buffer用于储存接收到的数据,len指定buffer的长度,而flags在应用中通常被设置0,src_from若不为空,则

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

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

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