问题描述
我的python程序正在与一个设备通讯,每当它收到对push / ack的确认时,该对话都会延迟整整一秒。对话长达数百甚至数千条消息,因此自然而然地我想找到一种解决方法。
是否有一种方法可以打开与我设备的连接,并保持打开状态以发送给设备,但不使用socket.recv()确认收到的消息?
import socket
s = socket.socket()
s.bind(('',xxxxx))
s.connect(('x.x.x.x',xxxxx))
while True:
try:
msg = input()
if 'exit' in msg:
data = b'I am done Now,bye'
s.send(data)
data = s.recv(2048)
print('recieved final message: ' + str(data))
break
msg = msg.encode()
s.send(msg)
print('sent message: ' + str(msg))
data = s.recv(2048)
print('received message: ' + str(data))
print()
data = ''
except Exception as e:
print(e)
s.close()
解决方法
在接收到数据时,ACK是必不可少的。否则,发送方将简单地假设未接收到数据,并将尝试重新发送数据。因为只有一个(最初很小的)非确认数据窗口是可以接受的,所以这实际上将使通信停止。因此,建立这样的连接没有任何意义,这就是为什么没有办法建立连接的原因。