Привет, У меня есть несколько систем, обменивающихся сообщениями через TCP-соединения.TCP Socket не может отправлять данные даже после выполнения sendall()
В процессе коммуникации между ними, я в первый отправке сообщения, как «Начало процесса», для которого в свою очередь он должен ответить, как «Процесс работы»
Однако сообщение «Процесс работы» не принимается в другую систему, тогда как строка sendall («Процесс запущена») выполняется без каких-либо исключений.
Мой пример кода выглядит следующим образом:
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
Главная Funciton:
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 (send) я захватил пакеты в wirehark, я получил пакет, содержащий «Start Process», но не получил пакет для «Process Started»
Может кто-нибудь помочь мне с этим ???
обновленный вышеупомянутый код, я сбрасываю msg в NULL в цикле. Я не включил мою другую программу здесь в вопрос, который отправляет «Start Process» в эту программу позже. Эта программа просто ждет, когда запускается другая программа, с которой она связывается через TCP, и когда получает «Start Process», он должен отправить «Process Started», но это не так. –
Я использовал время.спать между recv() и sendall, тогда он работает, но я не могу понять причину такого поведения –
... и вы получаете распечатку «статус отправленного», подтверждающий, что sendall() был выполнен? – Hannu