问一个TCP传输协议的问题(5分)

  • 主题发起人 主题发起人 kevinywb
  • 开始时间 开始时间
K

kevinywb

Unregistered / Unconfirmed
GUEST, unregistred user!
如题
我自定义了传输协议 包头规定了数据的处理命令和长度。
用的是indy9 idtcp的控件 readln/writeln和readbuff/writebuff方法都用过
怎么样能测试它的丢包现象。本想用协议里的数据长度判断我数据接收的完整性。
但根据indy9自带的demo,貌似不用进行判断,就可以保证数据的完整性。
请高手帮我解答一下。
因为我是新人,所以没有分贡献给大家,以后一定会补上的,
十分感谢!
 
还是要用长度判断的。
你自定义了传输协议,还不能测试丢包吗?不过tcp是又连接的协议,所谓的丢包我遇到的都是程序处理上的问题。
 
TCP是阻塞式的,所以丢包肯定是丢后面的包,你可以传输开始或者包头中带一个传输数据总长度,然后在接收端设置个定时检测接收数据大小的函数,如果一定时间接收数据大小不变,并且接收的数据大小不等于你传输过来的报头中的数据总大小时,把当前接收数据的大小发送给发送端,发送端从该位置重发后面的数据就可以了。不过你要考虑先随时处理发送端的缓存,不然会接收不到接收端发过来的数据
 
TCP协议自己会对丢包进行重发,这一点我们不用去管。也就是说,我们可以认为我们发送了1024长度的数据,那么我们在服务端就一定可以得到1024长度的数据,至于这1024长度的数据是否和后面的数据产生了“粘包”那将是另外一回事。通过TCP协议传输数据需要注意的主要在“粘包”处理上。
 
后退
顶部