========= tcp通讯的一个有关问题 =============
========= tcp通讯的一个问题 =============
我们的协议格式:
2字节的数据部分长度 数据部分
------------------ ----------
FFFF FC00EE.....
问题是:如果客户端的在发送数据时,只发送了200个字的一半,即100字节的数据就断开了(计算机死机、掉电、网络中断)
这时前100字节已经发送到了服务器端,请问服务器端该如何做,两种争论如下:
1、不用考虑这些情况,因为tcp可以保证数据正确传达,会丢掉坏包
2、需要自己设计协议以保证正确的处理坏包的情况。。
------解决方案--------------------
数据包头的那个数据长度,你以为在接收端不用它么?
------解决方案--------------------
socket都断开了,你怎么接收100字节?
------解决方案--------------------
你先理解一下TCP是怎么保证传输可靠性的,TCP协议里的ack是什么意思。
------解决方案--------------------
这个就是所谓的丢包,但是断开连接,掉电是不会出现这种情况的。
------解决方案--------------------
TCP的可靠传输:绝对保证顺序,尽量不丢包。
并且TCP是流传输:发33字节+44字节收到可能是55字节+22字节,内容不会错。
------解决方案--------------------
先发数据长度,再发送数据,
先接收长度,再接收数据,不够这个长度的数据就认定是失败了
我们的协议格式:
2字节的数据部分长度 数据部分
------------------ ----------
FFFF FC00EE.....
问题是:如果客户端的在发送数据时,只发送了200个字的一半,即100字节的数据就断开了(计算机死机、掉电、网络中断)
这时前100字节已经发送到了服务器端,请问服务器端该如何做,两种争论如下:
1、不用考虑这些情况,因为tcp可以保证数据正确传达,会丢掉坏包
2、需要自己设计协议以保证正确的处理坏包的情况。。
------解决方案--------------------
数据包头的那个数据长度,你以为在接收端不用它么?
------解决方案--------------------
socket都断开了,你怎么接收100字节?
------解决方案--------------------
你先理解一下TCP是怎么保证传输可靠性的,TCP协议里的ack是什么意思。
------解决方案--------------------
数据包头的那个数据长度,你以为在接收端不用它么?
当然要用。。
问题是,长度告诉我是200个字节,我只接收到100字节,所以我就会再接收100字节,但是其实这接收到的100字节是另一帧的数据的前100字节,所以数据就全乱了。。。
这个就是所谓的丢包,但是断开连接,掉电是不会出现这种情况的。
------解决方案--------------------
TCP的可靠传输:绝对保证顺序,尽量不丢包。
并且TCP是流传输:发33字节+44字节收到可能是55字节+22字节,内容不会错。
------解决方案--------------------
先发数据长度,再发送数据,
先接收长度,再接收数据,不够这个长度的数据就认定是失败了