100分请教:SOCKET最小传送单位问题 (100分)

  • 主题发起人 powersite
  • 开始时间
P

powersite

Unregistered / Unconfirmed
GUEST, unregistred user!
代码:
我用ServerSocket,ClientSocket传送文件,设置双方的每次发送接收缓冲区为8K或者4K,发现这么个问题,如果传送一个17K的文件,对于SERVER而言,8K+8K+1K依次顺利发出,而接收端用readbuf接收到缓冲区,有可能为4K+5K+3K+7K,即是说ClientSocket端可能在接收到不到8K数据时即被触发,这样的话,不能凭接收的数据<8K来判断已为接收文件的末尾。但我又不想用其他予先通知或添加数据控制信息表明文件长度。有个疑问:ServerSocket,ClientSocket传送数据的最小数据单位是多少?1K?还是什么?
 
最小数据单位是0,也就是包含IP头,TCP头,一共40个字节,比如ACK,SYNACK包都可以说是
0字节的TCP包
 
to 张无忌
 那就是说,无法来判断了?因为有可能一个帧只含控制信息,而信息数据却为空,是吧
 
这个包是由TCP协议本身来处理,
我认为TCP包最小的数据单位是0字节,
传输单位最小也是0字节。这由网络
的阻塞状况决定的
 
当对端端开或有异常时,发送或接收到的字节数都是0。这也是socket判断对端断开的方法。
 
设置本机的MTU(最大传输单位)
 
tcp就这样,换udp这个问题就没有了。
 
多人接受答案了。
 
顶部