Я использую PyZMQ для создания простого шаблона обмена сообщениями PAIR/PAIR.
Парный сервер
import zmq
import random
import sys
import time
port = "9999"
context = zmq.Context()
socket = context.socket(zmq.PAIR)
print("Binding socket to port: " + str(port))
socket.bind("tcp://*:%s" % port)
print("Connection has been established")
while True:
data = input("Enter: ")
socket.send_string(data)
msg = str(socket.recv(), "utf-8")
print("Received: ",msg)
time.sleep(2)
ПараКлиент
import zmq
import random
import sys
import time
port = "9999"
context = zmq.Context()
socket = context.socket(zmq.PAIR)
print("Connecting socket to port: " + str(port))
socket.connect("tcp://localhost:%s" % port)
print("Connected")
count = 0
response = 1
while True:
msg = str(socket.recv(), "utf-8")
print("Received: ",msg)
count = count + 1
print("Counter: ",count)
if count == response:
data = "Client has received message from server: " + msg
socket.send_string(data)
response = response + 1
time.sleep(2)
Я не могу отправлять пользовательский ввод с сервера на клиент, так как ничего не передается, когда я нажимаю ввод, но я могу отправлять и получать жестко закодированные сообщения с сервера на клиент. Когда я это делаю, сообщения, полученные со стороны сервера, иногда будут получены на стороне клиента. Я не уверен, связано ли это с тем, что оба скрипта запускаются на локальном хосте и в сокете есть конфликт.
Например,
Парный сервер
data = "random data"
ПараКлиент
Выход:
Received: random data
Counter: 4
Received: Client has received message from server: random data
Received: random data
Counter: 5
Received: random data
Counter: 6
Как отправить пользовательский ввод и предотвратить получение полученных сообщений от клиента на сервер клиентом на локальном хосте (если это проблема)?