Python3:Socket Receive同时获取所有数据

时间:2013-12-19 12:44:46

标签: sockets python-3.x asyncsocket

我有这段代码:

class SrvHandler(asyncore.dispatcher_with_send):
    def handle_read(self):
        data = self.recv(1024)
        if data:
            data = str(data, 'utf-8')
            print("Received: " + data)

现在,我有VBasic个应用程序。此应用程序有2 thread。这两个线程同时工作但使用相同的连接(声明静态连接)。有时,这两个线程同时发送数据,或者在几毫秒之间几次延迟发送数据。但问题是,Python3同时接收这两个不同的数据,就像一行数据一样。

例如:

VBasic Thread 1: socket.write("Hello")
VBasic Thread 2: socket.write("12345")

Python3 Data:
   Expected Result:
      First recv: Hello
      Second recv: 12345
   Actual Result:
      First recv: Hello12345

为什么Python3会像这样?我该怎么做才能防止这种混合?这种行为的原因是什么?它是按设计的吗?我该如何防止这种情况?在python3或VBasic(客户端或服务器)

希望这个例子和代码足够信息。

1 个答案:

答案 0 :(得分:2)

这是TCP等流媒体服务的预期行为。

TCP无法传输超过一个字节的任何消息。

如果要传输长度超过一个字节的任何结构,则需要在TCP之上的协议 - 可能在字符串末尾放置一个null或其他内容并发送它。在接收端,连接所有收到的字节,直到找到空值。

相关问题