通过socket传输数据的时候遇到问题。模式:一服务器对多客户端;遇到的问题刚开始感觉有点奇怪,有时正确有时又出错,而且出错的场合也不可捉摸,大致测试了下,猜测过如下可能性:
先是感觉群发可以,单点发送不行
后来发现是有线网可以,无线网不行
再发现是大数据不行,小数据包可以
最后记录在发送端和接收端 数据传输的报文,发现问题是:
在接收端时,TCP数据读取不完全时,就开始解析了,导致协议报文解析错误
靠。
有线网时,速度快,发送大数据报文也可以。
而无线网上面,速度慢,数据发送有较长的时间间隔,所以,数据片读取不完全的情况发生概率高多了。
以流形式传输时,发送端的多次发送可能会被一次接收;
一次发送也可以被多次读取。
比如
发送端发送三个报文:
1.AAAAAAAAAAAAAAAAAAAAAAAAAAAA
2.BBBBBBBBBBBBBBBBBBBBBBBBBBBB
3.CCCCCCCCCCCCCCCCCCCCCCCCCCCC
接收端可能会以不同的形式接收:
可能被一次接收:
AAAAAAAAAAAAAAAAAAAAAAAAAAAABBB
可能被两次接收:
报文1.AAAAAAAAAAAAAAAAAAAAAAAAAAA
报文2.BBBBBBBBBBBBBCCCCCCCCCCCCCC
可能被三次接收:
报文1.AAAAAAAAAAAAAAAAAAAAAAAAAAA
报文2.BBBBBBBBBBBBBBBBBBBBBBBBBBB
报文3.CCCCCCCCCCCCCCCCCCCCCCCCCCC
也可能被四次接收:
报文1.AAAAAAAAAAAAAAAAAAAAAAA
报文2.AAAAABBBBBBBBBBBBBBBBBB
报文3.BBBBBBBBBBCCCCCCCCCCCCC
报文4.CCCCCCCCCCCCCCC
等等。
以流形式,会被任意拆分,因此应用程序,需要对数据进行截分处理。
而原本我的错误理解是:
接收端只可能会被以如下形式接收:分三次接收
第一次接收报文1.AAAAAAAAAAAAAAAAAAAAAAAAAAA
第二次接收报文2.BBBBBBBBBBBBBBBBBBBBBBBBBBB
第三次接收报文3.CCCCCCCCCCCCCCCCCCCCCCCCCCC