如何检查Python中TCP套接字是否接收到所有数据

2 投票
1 回答
4388 浏览
提问于 2025-04-18 06:58

我正在尝试用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个字节。所以,你必须在一个循环中读取,直到你收到了想要的字节数。

撰写回答