python socket recv()用了循环来接受,为什么还是接受不全

2019-04-11 15:03发布

如下图,先接收了包头,然后while循环根据拿到的包体长度recv数据。但是发现越往后执行,用len()取到的包体长度跟包头中得到的包体长度开始变得不一致了。求大神解答,网上的解决方案我都试的差不多了,没一个行得通。

bodySize: 6
recv接收的长度是: 298

2条回答
劳资没心,怎么记你
2楼-- · 2019-04-11 15:57

你说的应该是粘包问题。  recv是缓冲模式的读取,具体的长度需要你自己处理才行

查看更多
乱世女痞
3楼-- · 2019-04-11 16:04

楼主自己解决了这个问题,其实recv(len)已经接受全了返回数据,但是楼主忽略了服务器主动推的数据(PS:游戏是用的长连接),所以后来解码的时候老是报错。
解决办法:对接受到的包头header_bytes[1]进行判断,如果等于我需要的GS2C,那么进行解码。

查看更多
登录 后发表回答