如何检查Python中TCP套接字是否接收到所有数据
我正在尝试用Python从TCP连接中获取数据(只是在客户端),
但是我发现所有的数据并不是一次性接收到的,而是在接收过程中被切断了……我在论坛上看到,TCP发送数据的顺序并不总是正确的(有点随机,链接:Python socket receive - incoming packets always have a different size),我是不是错了?
我想问有没有办法确保我正确接收到所有数据?
谢谢你们的帮助和回复,
附注:我已经增加了socket.recv()的缓冲区大小,但仍然遇到同样的问题……而且我只在CentOS上工作。
编辑:(无法回复我自己的问题 :( 还是这个论坛的新手 :))
嗨,
非常感谢你的回复,确实我不需要担心TCP连接 :)
经过进一步调查,我终于找到了解决方案……(在这里发问之前我找了几天),
如果有人需要答案,在Python中你必须等待完整的消息,否则消息可能会被切断,这意味着:
data = s.recv(1024, socket.MSG_WAITALL) --> 's'是Python代码中创建的一个socket对象,
祝好
1 个回答
1
使用套接字API时,你不需要担心TCP协议的那些事情,比如数据的顺序、重传等等,这些都已经由操作系统处理好了。唯一需要注意的是,socket.recv()
最多只会返回n个字节。这意味着在每次阻塞读取时,并不能保证你会收到n个字节。所以,你必须在一个循环中读取,直到你收到了想要的字节数。