Как получить адрес отправителя в сокете PYZMQ? (Несколько клиентов, 1 сервер) - PullRequest
0 голосов
/ 15 апреля 2020

Я создал сервер с сокетом, связанным с 2 портами. Теперь есть 2 клиента, каждый из которых подключен к 1 порту. Сервер получает случайные числа от обоих клиентов, но я хочу, чтобы сервер знал, с какого порта он получает данные. Я знаю, что это может быть довольно глупый вопрос, и я новичок в этом. Пожалуйста помоги !

Сервер

    import zmq
    context = zmq.Context()
    socket = context.socket(zmq.REP)
    socket.bind("tcp://*:5555") # A single port is used for the communication

    socket.bind("tcp://*:5556") # A single port is used for the communication
    #  Wait for next request from client
    while True:

        try:
            message = socket.recv()
            msg = message.decode("utf-8") # decode the bytes to string
            print("Random Integer Received: %s" % msg) # display received string
            #  Send reply back to client
            socket.send_string("Random Integer Received from client 1")
            #sock_add = socket.getaddrinfo()
        except zmq.ZMQError as e:
            print('Unable to receive: %s', e)

Клиент 1 (клиент 2 имеет идентичный код с адресом порта 5556)

    import zmq
    import time
    import numpy as np
    #import pandas as pd

    context = zmq.Context()
    num = np.random.randint(150) # Generates a random integer

    #  Socket to talk to server
    print("Connecting to server…")
    socket = context.socket(zmq.REQ)
    socket.connect("tcp://localhost:5555")

    #  Do 100 requests, waiting each time for a response
    for request in range(100):
        k = np.random.randint(150)  # Generates a random integer
        print("Sending request %s …" % request, "sent no is %s" % k)
        socket.send_string(str(k))

        #  Get the reply.
        message = socket.recv()
        print("Received reply %s [ %s ]" % (request, message))
        time.sleep(5)  # delay of 5 seconds

Пожалуйста, помогите !!

1 Ответ

0 голосов
/ 15 апреля 2020

Я бы просто добавил необходимую информацию (порт) в само сообщение и использовал бы zmq.SNDMORE ...

Что-то вроде:

socket.send_string("Port 5555", flags=zmq.SNDMORE)
socket.send_string(str(k)) # or 5556

И затем, на на стороне сервера вы можете видеть, с какого порта поступают сообщения, основываясь на самом сообщении.

...