嗨我有多個系統通過使用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