Нет, вы не можете получить адрес отправителя из ZeroMq. У вас в основном есть два варианта; добавьте информацию о адресах отправителей самому сообщению (не плохой вариант, если вам разрешено изменять существующие структуры сообщений) или добавить адрес отправителя в качестве части сообщения, то есть использовать многокомпонентные сообщения ZeroMq.
Многопользовательское сообщение по-прежнему будет доставлено в целом (все части или вообще отсутствуют), но вы можете извлекать детали отдельно на принимающей стороне, таким образом вы можете добавить или добавить адрес отправителя к любым существующим сообщениям фактически не прикасаясь к ним (и доставлять как адрес + сообщение как атомную операцию).
Я не уверен, как это реализовано в привязке pyzmq, но зайдите в socket.pyx source для получения дополнительной информации (в основном, используйте флаг SNDMORE в методе send (..)).
Также ознакомьтесь с ZeroMqApi docs (3.2.2).
В C++, это будет выглядеть примерно так:
// Send a multi-part message consisting of sender IP plus another message
zmq_msg_send (&my_ip, my_socket, ZMQ_SNDMORE);
zmq_msg_send (&my_message, my_socket, 0);
Что вы можете получить является GUID идентификатор отправителя, но не данные вы в противном случае собираете с помощью 'getpeername'. Следующая ссылка может помочь: http://lists.zeromq.org/pipermail/zeromq-dev/2011-June/012041.html –