socket通信过程及流程

socket通信过程及流程

ID:8973318

大小:185.63 KB

页数:0页

时间:2018-04-13

socket通信过程及流程_第页
预览图正在加载中,预计需要20秒,请耐心等待
资源描述:

《socket通信过程及流程》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、socket通信过程及流程下图是基于TCP协议的客户端/服务器程序的一般流程:服务器调用socket()、bind()、listen()完成初始化后,调用accept()阻塞等待,处于监听端口的状态,客户端调用socket()初始化后,调用connect()发出SYN段并阻塞等待服务器应答,服务器应答一个SYN-ACK段,客户端收到后从connect()返回,同时应答一个ACK段,服务器收到后从accept()返回。数据传输的过程:建立连接后,TCP协议提供全双工的通信服务,但是一般的客户端/服务器程序的流程是由客户端主动发起请求,服务器被动处理请求

2、,一问一答的方式。因此,服务器从accept()返回后立刻调用read(),读socket就像读管道一样,如果没有数据到达就阻塞等待,这时客户端调用write()发送请求给服务器,服务器收到后从read()返回,对客户端的请求进行处理,在此期间客户端调用read()阻塞等待服务器的应答,服务器调用write()将处理结果发回给客户端,再次调用read()阻塞等待下一条请求,客户端收到后从read()返回,发送下一条请求,如此循环下去。如果客户端没有更多的请求了,就调用close()关闭连接,就像写端关闭的管道一样,服务器的read()返回0,这样服务

3、器就知道客户端关闭了连接,也调用close()关闭连接。注意,任何一方调用close()后,连接的两个传输方向都关闭,不能再发送数据了。如果一方调用shutdown()则连接处于半关闭状态,仍可接收对方发来的数据。在学习socketAPI时要注意应用程序和TCP协议层是如何交互的:*应用程序调用某个socket函数时TCP协议层完成什么动作,比如调用connect()会发出SYN段*应用程序如何知道TCP协议层的状态变化,比如从某个阻塞的socket函数返回就表明TCP协议收到了某些段,再比如read()返回0就表明收到了FIN段看图所示的socke

4、t 通信过程图12.9socket的通信过程1.建立套接字在sys/socket.h中。intsocket(intfamily,inttype,intprotocol);socket()打开一个网络通讯端口,如果成功的话,就像open()一样返回一个文件描述符,应用程序可以像读写文件一样用read/write在网络上收发数据,如果socket()调用出错则返回-1。对于IPv4,family参数指定为AF_INET。对于TCP协议,type参数指定为SOCK_STREAM,表示面向流的传输协议。如果是UDP协议,则type参数指定为SOCK_DGRA

5、M,表示面向数据报的传输协议。protocol参数的介绍从略,指定为0即可。Linux在利用socket()系统调用建立新的套接字时,需要传递套接字的地址族标识符、套接字类型以及协议,其函数定义于net/socket.c中:  asmlinkagelongsys_socket(intfamily,inttype,intprotocol)  {       intretval;       structsocket*sock;         retval=sock_create(family,type,protocol,&sock);       i

6、f(retval<0)                gotoout;         retval=sock_map_fd(sock);        if(retval<0)                gotoout_release; out:        /*Itmaybealreadyanotherdescriptor8)Notkernelproblem.*/       returnretval; out_release:        sock_release(sock);       returnretval;}  实际上,套接字

7、对于用户程序而言就是特殊的已打开的文件。内核中为套接字定义了一种特殊的文件类型,形成一种特殊的文件系统sockfs,其定义于net/socket.c: staticstructvfsmount*sock_mnt; staticDECLARE_FSTYPE(sock_fs_type,"sockfs",sockfs_read_super,FS_NOMOUNT);    在系统初始化时,要通过kern_mount()安装这个文件系统。安装时有个作为连接件的vfsmount数据结构,这个结构的地址就保存在一个全局的指针sock_mnt中。所谓创建一个套接字,

8、就是在sockfs文件系统中创建一个特殊文件,或者说一个节点,并建立起为实现套接字功能所需的一整套数据结构。

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

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

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