版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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年联合作战筹划工具应用考核试卷
- 关于银行大堂经理述职报告范文(17篇)
- 护理健康宣教报告模板-1
- 理赔部经理述职报告(3篇)
- 轧钢安全宣传标语讲解
- 个人医生述职报告集锦(13篇)
- 2023小学教导主任年终述职报告(31篇)
- 生产安全宣传插画讲解
- 职业暴露试题与答案
- 农学题目答案解析及答案
- 2026年天津市公安辅警笔试试题(含答案)
- (2026)政工师职称考试题库及参考答案
- 2026年江苏小升初(数学)真题试卷(含答案)
- 2026年杭州市农产品冷链仓储可行性研究报告
- 箱式电阻炉操作规程操作规程
- 2022中国功能性消化不良诊治专家共识课件
- 2026江苏省数据集团数字科技有限公司招聘笔试考试参考试题及答案
- 2026年北京市劳动合同范本三篇
- 《图形图像处理》课程标准
- 2026湖南株洲市消防救援支队消防文员招聘14人笔试参考题库及答案解析
- 2024年女性私护品市场调查报告
评论
0/150
提交评论