Мне нужно отправить строку на определенный порт на локальном хосте с помощью python.
Я могу добиться этого, используя socat в командной строке, например:
cat <text file containing string to send> | socat stdin tcp-connect:127.0.0.1:55559
Я не хочу запускать команду socat как подкоманду, поэтому я хотел бы знать, как заставить это работать с помощью модуля python.
Мои попытки использовать сокеты не увенчались успехом. Ниже приведен сценарий, который я использовал, но который не достиг желаемого эффекта.
import socket
HOST, PORT = "127.0.0.1", 55559
jsonString = '{"name":"VideoStreamStatus","parameters":{"name":"video_0_0"}}'
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
# Connect to server and send data
print "Attempting connection"
sock.connect((HOST, PORT))
print "Sending json string"
sock.sendall(jsonString)
print "String sent"
finally:
sock.close()
print "Sent: {}".format(jsonString)
Сценарий Python выполнялся без каких-либо ошибок, но это не повлияло на процесс, который получал данные socat. Вывод скрипта Python ниже:
Attempting connection
Sending json string
Sent: {"name":"VideoStreamStatus","parameters":{"name":"video_0_0"}}
Есть ли что-то, что я делаю неправильно в сценарии сокета, или есть другой метод, который я могу использовать в Python? Буду признателен за любой совет. Спасибо.
Редактировать: сервер, на который я пытаюсь отправить строки, является частью программы C++, использующей акцептор boost asio для прослушивания tcp-соединений по определенному адресу и порту.
nc -l 55559
отображает строку json на своем стандартном выводе. Пожалуйста, опишите сервер, который вы используете, и что заставляет вас думать, что это не повлияло на процесс, который получал данные socat. - person Robᵩ   schedule 04.10.2016