0
您好,我有多个系统通过使用TCP连接的消息进行通信。TCP套接字无法在突发中发送消息
我的发送功能如下所示
def _send(self, message, dest):
self.sendLock.acquire()
message = pickle.dumps(message)
#sending length
message_length = len(message)
self.outChan[dest].send('<MESSAGELENGTH>%s</MESSAGELENGTH>'
% str(message_length))
for message_i in range(0, message_length, 1024):
self.outChan[dest].send(message[:1024])
message = message[1024:]
self.sendLock.release()
和接收线程是这样的:该消息是从self.rec确认消息读取发送给发件人
def readlines(self, sock):
while True:
msg = ''
opTag = '<MESSAGELENGTH>'
clTag = '</MESSAGELENGTH>'
while not all(tag in msg for tag in (opTag, clTag)):
msg = sock.recv(1024)
msglen = int(msg.split(clTag)[0].split(opTag)[1])
msg = msg.split(clTag)[1]
while len(msg) < msglen:
msg += sock.recv(msglen-len(msg))
self.rec.put(pickle.loads(msg))
后。
我已经实现了我自己的缓冲区来控制网络中的流量。在任何时候,我都会发送几乎没有收到确认的MAX_BUFFER_SIZE消息。
下面是问题:程序启动时,它会发送MAX_BUFFER_SIZE消息而不等待确认。但是只有少数这些MAX_BUFFER_SIZE消息被接收。
在其中一个MAX_BUFFER_SIZE = 5的仿真中,共发送了100条消息,未接收到m2,m3和m4。所有其他消息都已收到(按照它们发送的顺序)。
我怀疑错误是在最初的发送突发,但我无法找出确切的问题。
它的工作原理。谢谢 :) – user1396267 2014-09-25 11:28:43