版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Outline2021-11-41Outline2021-11-42 无边界 传送时机未知 写入、读出、传送形态各异2021-11-43字节流的特点recvsendTCP 从传输方的角度来观察数据TCP如何决定字节流的处理?l 当前接收方希望接收的数据量l 网络是否存在阻塞l 网络路径MTUl 本地连接的输出队列上有多少数据正在排队或未接收到应答l 2021-11-44TCP对字节流的处理M2M1应用程序A应用程序B 从传输方的角度来观察数据2021-11-45TCP对字节流的处理M2M1M2M1M21M22M1M12M11M2应用程序A应用程序B 从传输方的角度来观察数据2021-11-46
2、TCP对字节流的处理 当程序调用发送操作时,由于主机和网络当前的状态不同,会使得数据传送的形式产生很大的差别! 从接收方的角度来观察数据p 没有数据p 接收到已交付的部分数据u 接收缓存太小2021-11-47数据接收的可能情况 从接收方的角度来观察数据p 接收到已交付的全部数据u 部分M12021-11-48数据接收的可能情况M2M1M2M1M21M22M1M12M11M2 从接收方的角度来观察数据p 接收到已交付的全部数据u M12021-11-49数据接收的可能情况M2M1M2M1M21M22M1M12M11M2 从接收方的角度来观察数据p 接收到已交付的全部数据u M1+部分M2202
3、1-11-410数据接收的可能情况M2M1M2M1M21M22M1M12M11M2 从接收方的角度来观察数据p 接收到已交付的全部数据u M1+M22021-11-411数据接收的可能情况M2M1M2M1M21M22M1M12M11M2 总结TCP的流传送特点p TCP是一个流协议,TCP如何对数据打包跟调用send()函数传递多少数据没有直接的关系。p 对于使用TCP的应用程序来说,没有“数据边界”的概念,接收操作返回的时机和数量是不可预测的,必须在应用程序中正确处理。2021-11-412TCP的流传送特点 send()函数由应用程序操作,TCP对数据打包由操作系统协议栈操作! 数据传送端
4、所传递的数据顺序与数据接收端所接收的数据顺序没有必然的联系!Outline2021-11-4132021-11-414套接字接口层的位置与内容套套接接口口2021-11-415套接字接口层的位置与内容2021-11-416套接字接口层的位置与内容2021-11-417数据发送和接收过程中的缓存现象2021-11-418数据发送和接收过程中的缓存现象iSendResult = send(ClientSocket, buffer0, 1000, 0);iSendResult = send(ClientSocket, buffer1, 2000, 0);iSendResult = send(Clie
5、ntSocket, buffer2, 3000, 0); 接收端尚未执行任何recv()之前的一种可能的状态2021-11-419数据发送和接收过程中的缓存现象 接收端执行一次recv()p 接收端的应用程序缓冲区长度当前接收缓存的数据长度2021-11-421数据发送和接收过程中的缓存现象Outline2021-11-4222021-11-423完整接收流数据SOKCET ConnectSocket;int recvbuflen;char recvbufMSGSZ;recv(ConnectSocket, recvbuf, recvbuflen, 0);能完整的接收到全部流数据吗? 数据的接收
6、处理需要考虑到网络中的各种可能性p 第一,一次接收不能保证接收到一次发送的所有数据!u 循环接收p 第二,接收函数的调用结果有很多种!u 结果判断2021-11-424完整接收流数据返回结果返回结果原因原因后续处理后续处理iResult = recvbuflen接收到与缓冲区长度相等的数据应处理数据iResult 0 )printf(Bytes received: %dn, iResult);else if ( iResult = 0 )printf(Connection closedn);elseprintf(recv failed with error: %dn, WSAGetLastEr
7、ror(); while( iResult 0 ); 预分配的应用程序缓冲区recvbuf的取值难以确定p 过小的recvbufu 频繁地调用,消耗资源p 过大的recvbufu 浪费系统的存储资源 接收数据的数量不可预测p 发送端和接收端都等待数据u 死锁!p 武断截断消息u 错误!2021-11-426流传输特点所产生的困惑 模拟定长数据包的形态处理底层提交的字节流数据p 预先给定了接收数据的总长度p 增加接收总长度的判断2021-11-427接收定长数据接收定长数据int recvn(SOCKET s, char * recvbuf, unsigned int fixedlen)int
8、iResult, cnt = fixedlen; while ( cnt 0 ) iResult = recv(s, recvbuf, cnt, 0);if ( iResult recvbuflen ) while ( reclen 0)iResult = recvn(s, recvbuf, recvbuflen);if ( iResult != recvbuflen ) if ( iResult = -1 ) printf(接收发生错误: %dn, WSAGetLastError();return -1;else printf(连接关闭n);return 0;reclen -= recvbuflen;if ( reclen recvbuflen )recvbuflen = reclen;printf(可变长度的消息超出预分配的接收缓存rn);return -1;接收定长数据iResult = recvn( s, recvbuf, reclen );if
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- DB11-T 1322.58-2025 安全生产等级评定技术规范 第58部分:社会旅馆
- 塔吊安装拆除与起重吊装培训
- 2025年吉安泰和县旅游投资发展有限公司招聘考试真题
- 2025年上海药品审评核查中心招聘辅助人员考试真题
- 2025年汉中市中医医院招聘考试真题
- 《数控加工编程与操作2》课件-0.3.1 Creo软件基本操作-启动软件、创建文件夹、设置工作目录、打开文件、鼠标使用、操作界面
- 2026湖北武汉市新洲区中医骨伤专科医院招聘护理人员7人考试参考题库及答案解析
- 2026内蒙古呼和浩特民族学院招聘(高等学校人员总量控制数)12人笔试参考题库及答案解析
- 2026年定西市气象系统事业单位人员招聘考试备考试题及答案详解
- 2026江苏连云港市赣榆区教育局所属学校招聘新教师29人考试备考题库及答案解析
- 2026长江财产保险股份有限公司武汉分公司综合部(副)经理招聘1人笔试备考题库及答案解析
- 2026年4月自考10993工程数学(线性代数、概率论与数理统计)试题
- GB/Z 177.2-2026人工智能终端智能化分级第2部分:总体要求
- 雨课堂学堂在线学堂云《自然辩证法概论( 武汉科技大)》单元测试考核答案
- 市场营销学(山东大学)智慧树知到期末考试答案章节答案2024年山东大学(威海)
- 挡墙人工挖孔桩安全专项施工方案专家论证
- 二年级上册心理健康课件-我的情绪我做主 全国通用(共19张PPT)
- 完整word版,“吕氏八字命理学”高级理论
- 看台膜结构施工
- 手绘表现——快题设计
- 自动开箱机结构设计(共40页)
评论
0/150
提交评论