嗨我有多个系统通过使用TCP连接的消息进行通信。即使在执行sendall后,TCP套接字也无法发送数据()
在通信两者之间的方法,我在第一发送的消息如“开始处理”,为此在返回它应回复“进程启动”
然而,消息“进程启动”不会收到其他系统,而sendall(“Process已启动”)行没有任何例外。
我的样本代码如下:
TCP初始化:
def __init__(self):
self.tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.tcp.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.tcp.setsockopt(socket.SOL_SOCKET, socket.SO_RCVTIMEO, struct.pack('ll',0,1))
self.tcp.bind('',12000)
self.tcp.listen(1)
self.client, seld.address = self.tcp.accept()
(self.Ip,self.port)= self.address
主要功能可按:
while True:
msg =""
try:
msg = self.client.recv(512)
except socket.error as e:
if e[0] == 11:
# exception for RECVTIMEO used in the socket creation.
pass
if (msg == "Start Process"):
send = "Process Started"
self.client.sendall(send)
print "status sent"
在执行这个代码段,我能够收到消息“启动过程“。但是在执行self.client.sendall(发送)的时候,虽然没有发送“进程已启动”,但是我已经捕获了wireshark中的数据包,但我得到了包含“启动进程”的数据包,但没有为“进程启动”获取数据包
有人可以帮助我吗?
已更新上述代码,我将msg重置为循环中的NULL。我没有在我的其他程序中包含这个问题,该程序稍后将“启动过程”发送给此程序,此程序仅等待其他程序启动,并通过TCP进行绑定,并且当它收到“启动过程”它应该发送“进程启动”,但它不这样做。 –
我确实使用过时间。在recv()和sendall之间睡觉,那么它正在工作,但我无法理解这种行为的原因 –
...你得到“状态发送”打印输出,确认sendall()被执行了? – Hannu