- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
socket 信过程及流程
socket 通信过程及流程
下图是基于TCP协议的客户端/服务器程序的一般流程:
服务器调用socket()、bind()、listen()完成初始化后,调用accept()阻塞等待,处于监听端口的状态,客户端调用socket()初始化后,调用connect()发出SYN段并阻塞等待服务器应答,服务器应答一个SYN-ACK段,客户端收到后从connect()返回,同时应答一个ACK段,服务器收到后从accept()返回。
数据传输的过程:
建立连接后,TCP协议提供全双工的通信服务,但是一般的客户端/服务器程序的流程是由客户端主动发起请求,服务器被动处理请求,一问一答的方式。因此,服务器从accept()返回后立刻调用read(),读socket就像读管道一样,如果没有数据到达就阻塞等待,这时客户端调用write()发送请求给服务器,服务器收到后从read()返回,对客户端的请求进行处理,在此期间客户端调用read()阻塞等待服务器的应答,服务器调用write()将处理结果发回给客户端,再次调用read()阻塞等待下一条请求,客户端收到后从read()返回,发送下一条请求,如此循环下去。
如果客户端没有更多的请求了,就调用close()关闭连接,就像写端关闭的管道一样,服务器的read()返回0,这样服务器就知道客户端关闭了连接,也调用close()关闭连接。注意,任何一方调用close()后,连接的两个传输方向都关闭,不能再发送数据了。如果一方调用shutdown()则连接处于半关闭状态,仍可接收对方发来的数据。
在学习socket API时要注意应用程序和TCP协议层是如何交互的: *应用程序调用某个socket函数时TCP协议层完成什么动作,比如调用connect()会发出SYN段 *应用程序如何知道TCP协议层的状态变化,比如从某个阻塞的socket函数返回就表明TCP协议收到了某些段,再比如read()返回0就表明收到了FIN段
看图所示的socket?通信过程
图12.9 socket 的通信过程
1.建立套接字
在sys/socket.h中。
int socket(int family, int type, int protocol);
socket()打开一个网络通讯端口,如果成功的话,就像open()一样返回一个文件描述符,应用程序可以像读写文件一样用read/write在网络上收发数据,如果socket()调用出错则返回-1。对于IPv4,family参数指定为AF_INET。对于TCP协议,type参数指定为SOCK_STREAM,表示面向流的传输协议。如果是UDP协议,则type参数指定为SOCK_DGRAM,表示面向数据报的传输协议。protocol参数的介绍从略,指定为0即可。
Linux在利用socket()系统调用建立新的套接字时,需要传递套接字的地址族标识符、套接字类型以及协议,其函数定义于net/socket.c中:
?? asmlinkagelong sys_socket(int family, int type, int protocol)
? ?{
??????? int retval;
??????? struct socket *sock;
?
????????retval = sock_create(family, type, protocol,sock);
??????? if (retval 0)
????????????????goto out;
?
????????retval = sock_map_fd(sock);
????????if (retval 0)
????????????????goto out_release;
?
out:
????????/* It may be already another descriptor 8) Not kernel problem. */
??????? return retval;
?
out_release:
????????sock_release(sock);
??????? return retval;
}
?? 实际上,套接字对于用户程序而言就是特殊的已打开的文件。内核中为套接字定义了一种特殊的文件类型,形成一种特殊的文件系统sockfs,其定义于net/socket.c:
?static struct vfsmount *sock_mnt;
?static DECLARE_FSTYPE(sock_fs_type, sockfs,sockfs_read_super, FS_NOMOUNT);
?
? ??在系统初始化时,要通过kern_mount()安装这个文件系统。安装时有个作为连接件的vfsmou
您可能关注的文档
- PT2262272编解码集成电路介绍.doc
- PT650D中说明书.doc
- PT_实验(三_交换机划分VLAN配置.doc
- PTT之二 组与教学能力训练(满分答案)--2013最新时代光华课程.docx
- PVC模型制作验报告.doc
- Q-0018D决问题步骤讲义.doc
- QC7004微物检验方法学验证管理规程.doc
- QEP010采控制程序1.doc
- QJZ系列使用明书.doc
- Qnqgsb理和实践,怎样过英语四级.doc
- 2024-2025学年公安消防队真题附答案详解【培优A卷】.docx
- 2024公安消防队复习提分资料含完整答案详解(易错题).docx
- 2024-2025学年公安消防队考前冲刺练习及答案详解(有一套).docx
- 2024-2025学年公安消防队考前冲刺练习(培优B卷)附答案详解.docx
- 2023年度高考考前冲刺测试卷(巩固)附答案详解.docx
- 2023年度高考真题附参考答案详解【轻巧夺冠】.docx
- 2024-2025学年高考练习题附答案详解(黄金题型).docx
- 2024-2025学年公安消防队全真模拟模拟题带答案详解(巩固).docx
- 2024-2025学年高考通关题库完整参考答案详解.docx
- 2024-2025学年度高考考前冲刺练习试题附参考答案详解(轻巧夺冠).docx
最近下载
- 公路桥涵施工技术规范(JTJ041-2000).doc VIP
- 西威变频器快速调试手册(电梯维修资料).pdf VIP
- 《国际汉语教师证书》考试汉办真题20170423 .pdf VIP
- 2025年高考语文课内文言文知识梳理(统编版)专题10《谏逐客书》(原卷版).docx VIP
- 07J905-1 防火建筑构造(一).pdf
- 2025年衢州常山县统计局公开招聘编外统计员13人笔试备考试题含答案详解(能力提升).docx
- 2025年贵州省中考数学真题试卷及答案.docx VIP
- 中国红磷阻燃剂项目商业计划书.docx
- gc65-全球小四频封装gsm gprs模块尺寸仅为opencpu规格说明书.pdf VIP
- 2025年中国车辆照明及电气信号设备制造项目投资计划书.docx
文档评论(0)