У меня есть TCP-сервер, для которого мне нужно написать клиент в Python.эквивалент python netcat
Сервер представляет собой ардуино, используя библиотеку arduino_uip; код сервера (почти) совпадает с кодом TCP server example of that library. Он отлично работает с использованием nc в качестве клиента.
Но когда я использую сокеты python (как в this answer) для связи с сервером, сервер зависает при выключении или закрытии сокета.
Возможно, это проблема с сервером; однако, поскольку nc работает нормально как клиент, мой вопрос:
Что делает this answer делать иначе, чем nc, что может объяснить сервер, зависающий при отключении/закрытии соединения)?
Подводя итог работы &, что нет:
- клиент питона & н.д. -l в качестве сервера: работает
- пс как клиент & сервер Arduino: работает
- питон клиент & Arduino сервера: зависание сервер
Код клиентского кода:
import socket
def netcat(hostname, port, content):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((hostname, port))
s.sendall(content)
s.shutdown(socket.SHUT_WR)
while 1:
data = s.recv(1024)
if data == "":
break
print "Received:", repr(data)
print "Connection closed."
s.close()
Edit:
Оказывается (ответ Превосходство заставил меня думать об этом!), Что это на самом деле проблема времени. Если я добавлю sleep (0.5) перед выключением в приведенном выше коде, все работает красиво (как в netcat, где есть ручная задержка до того, как я нажму Ctrl + C). Я полагаю, что мне нужно будет проверить эту библиотеку arduino сейчас ...
ли вы попробуйте удалить 's.shutdown()' вызов ? Вы говорите, что это зависает на 'socketshutdown или close' - вы имеете в виду оба/или? – Gerrat