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

时间:2014-05-19 08:22:01

标签: python sockets tcp buffer recv

我正在尝试使用Python作为编程语言从TCP连接(仅客户端)获取数据,

但是,我可以看到所有数据都没有一次收到并且在接收过程中被切断......我可以在论坛上看到TCP没有以正确的顺序发送数据(它有点随机,链接:Python socket receive - incoming packets always have a different size),我错了吗?

我的问题是,无论如何确保我已正确接收所有数据?

提前感谢您的帮助和回复,

PS:我已经增加了socket.recv()的缓冲区大小,但仍面临同样的问题......我只在CentOS下工作

编辑:(不能回复我自己的问题:(在这个论坛上仍然是初学者:))

您好,

非常感谢您的回复,确实我不必担心TCP连接:)

经过更多调查后,我终于可以找到解决方案......(我在此处发布问题之前已经搜索了几天),

如果有人需要答案,在python中你必须等待完整的消息,否则消息可以被删除,所以这意味着:

data = s.recv(1024,socket.MSG_WAITALL) - > ' S'是在python代码中创建的套接字对象,

亲切的问候

1 个答案:

答案 0 :(得分:1)

使用套接字API,您不必担心TCP(排序,重新传输等等),它们都由操作系统处理。唯一的问题是socket.recv()将返回最多 n个字节。这意味着无法保证在每次阻塞读取时都会收到n个字节。因此,您必须在循环中读取,直到收到所需的字节数。