第4讲TCP的流传输控制_第1页
第4讲TCP的流传输控制_第2页
第4讲TCP的流传输控制_第3页
第4讲TCP的流传输控制_第4页
第4讲TCP的流传输控制_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论