版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 Outline 2021-7-181 Outline 2021-7-182 无边界 传送时机未知 写入、读出、传送形态各异 2021-7-183 字节流的特点 recv send TCP 从传输方的角度来观察数据 TCP如何决定字节流的处理? l 当前接收方希望接收的数据量 l 网络是否存在阻塞 l 网络路径MTU l 本地连接的输出队列上有多少数据正在排队或未接收到 应答 l 2021-7-184 TCP对字节流的处理 M2M1应用程序A应用程序B 从传输方的角度来观察数据 2021-7-185 TCP对字节流的处理 M2M1 M2M1 M21M22M1 M12M11 M2 应用程序A应用
2、程序B 从传输方的角度来观察数据 2021-7-186 TCP对字节流的处理 当程序调用发送操作时,由于主机和 网络当前的状态不同,会使得数据传送的 形式产生很大的差别! 从接收方的角度来观察数据 p 没有数据 p 接收到已交付的部分数据 u 接收缓存太小 2021-7-187 数据接收的可能情况 从接收方的角度来观察数据 p 接收到已交付的全部数据 u 部分M1 2021-7-188 数据接收的可能情况 M2M1 M2M1 M21M22M1 M12M11M2 从接收方的角度来观察数据 p 接收到已交付的全部数据 u M1 2021-7-189 数据接收的可能情况 M2M1 M2M1 M21M
3、22M1 M12M11M2 从接收方的角度来观察数据 p 接收到已交付的全部数据 u M1+部分M2 2021-7-1810 数据接收的可能情况 M2M1 M2M1 M21M22M1 M12M11M2 从接收方的角度来观察数据 p 接收到已交付的全部数据 u M1+M2 2021-7-1811 数据接收的可能情况 M2M1 M2M1 M21M22M1 M12M11M2 总结TCP的流传送特点 p TCP是一个流协议,TCP如何对数据打包跟调用send()函 数传递多少数据没有直接的关系。 p 对于使用TCP的应用程序来说,没有“数据边界”的概 念,接收操作返回的时机和数量是不可预测的,必须在
4、应用程序中正确处理。 2021-7-1812 TCP的流传送特点 send()函数由应用程序操作,TCP 对数据打包由操作系统协议栈操作! 数据传送端所传递的数据顺序与 数据接收端所接收的数据顺序没有必 然的联系! Outline 2021-7-1813 2021-7-1814 套接字接口层的位置与内容 套套 接接 口口 2021-7-1815 套接字接口层的位置与内容 2021-7-1816 套接字接口层的位置与内容 2021-7-1817 数据发送和接收过程中的缓存现象 2021-7-1818 数据发送和接收过程中的缓存现象 iSendResult = send(ClientSocket,
5、 buffer0, 1000, 0); iSendResult = send(ClientSocket, buffer1, 2000, 0); iSendResult = send(ClientSocket, buffer2, 3000, 0); 接收端尚未执行任何recv()之前的一种可能的状态 2021-7-1819 数据发送和接收过程中的缓存现象 接收端执行一次recv() p 接收端的应用程序缓冲区长度当前接收缓存的数据长 度 2021-7-1821 数据发送和接收过程中的缓存现象 Outline 2021-7-1822 2021-7-1823 完整接收流数据 SOKCET Conne
6、ctSocket; int recvbuflen; char recvbufMSGSZ; recv(ConnectSocket, recvbuf, recvbuflen, 0); 能完整的接收到全部流数据吗? 数据的接收处理需要考虑到网络中的各种可能性 p 第一,一次接收不能保证接收到一次发送的所有数据! u 循环接收 p 第二,接收函数的调用结果有很多种! u 结果判断 2021-7-1824 完整接收流数据 返回结果返回结果原因原因后续处理后续处理 iResult = recvbuflen接收到与缓冲区长度相等 的数据 应处理数据 iResult 0 ) printf(Bytes rece
7、ived: %dn, iResult); else if ( iResult = 0 ) printf(Connection closedn); else printf(recv failed with error: %dn, WSAGetLastError(); while( iResult 0 ); 预分配的应用程序缓冲区recvbuf的取值难以确定 p 过小的recvbuf u 频繁地调用,消耗资源 p 过大的recvbuf u 浪费系统的存储资源 接收数据的数量不可预测 p 发送端和接收端都等待数据 u 死锁! p 武断截断消息 u 错误! 2021-7-1826 流传输特点所产生的困
8、惑 模拟定长数据包的形态处理底层提交的字节流数据 p 预先给定了接收数据的总长度 p 增加接收总长度的判断 2021-7-1827 接收定长数据 接收定长数据 int recvn(SOCKET s, char * recvbuf, unsigned int fixedlen) int 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 );
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新疆维吾尔自治区哈密市2026届高三适应性调研考试语文试题含解析
- 教育基础及其方法 9
- 感冒患者健康须知
- 室内装饰设计师CAD试卷及分析
- 实验4 基本路由配置
- 事业单位综合岗题目及详解
- 老年人急性化脓性中耳炎的急救护理
- 雨课堂学堂在线学堂云《正常人体结构与功能(哈尔滨职业技术)》单元测试考核答案
- 雨课堂学堂在线学堂云《哲学导论(天水师范学院)》单元测试考核答案
- 幼儿园幼儿手工安全告知书(家长版)
- 大型三维五轴光纤激光切割系统技术规范-征求意见稿
- 《肌张力障碍指南》课件
- 工程事故紧急应急预案
- 《事业编制人员入职信息填写表》
- 电气设备绝缘测量-课件
- 内蒙古生产建设兵团组建始末
- 桩基(预应力管桩)工程监理实施细则
- 《内河船舶法定检验技术规则》课件
- 知名房地产公司施工图设计技术指引
- 从报表看企业-2课件
- 产后康复骨盆修复
评论
0/150
提交评论