Python3:套接字接收的同时
问题描述:
获取所有数据我有这样的代码:Python3:套接字接收的同时
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(客户端或服务器)
希望这个例子和代码足够丰富。
答
这是TCP等流媒体服务的预期行为。
TCP无法传输超过一个字节的任何消息。
如果你想传输任何长度超过一个字节的结构,你需要一个在TCP之上的协议 - 也许在你的字符串末尾放置一个null或者什么的,然后发送它。在接收端,连接所有收到的字节,直到找到空。
而.....完成!谢谢 :) – xangr