【发布时间】:2012-11-09 19:02:54
【问题描述】:
我使用 0MQ 的路由器经销商模式。现在我想存储客户的地址。我知道来自客户端的第一条消息是地址,我猜是 IP + portno。或者更确切地说,来自路由器套接字的recv() 将地址放在接收到的数据包的前面。但是我该如何处理这个地址,例如打印或存储它以供进一步传出消息?它是什么类型的?
【问题讨论】:
标签: c++ c network-programming zeromq
我使用 0MQ 的路由器经销商模式。现在我想存储客户的地址。我知道来自客户端的第一条消息是地址,我猜是 IP + portno。或者更确切地说,来自路由器套接字的recv() 将地址放在接收到的数据包的前面。但是我该如何处理这个地址,例如打印或存储它以供进一步传出消息?它是什么类型的?
【问题讨论】:
标签: c++ c network-programming zeromq
这是关于此的指南解释:http://zguide.zeromq.org/page:all#The-Request-Reply-Mechanisms
ROUTER 管理一组连接,并为每个连接保留一个“身份”,这是一个随机数,就像一个句柄。它在每条消息上告诉你这个身份,作为第一帧。这是一个二进制值,所以不能按原样打印。
DEALER 可以通过在连接时告诉它“使用此 ID”来覆盖 ROUTER 的内部身份。这就是 zmq_setsockopt ZMQ_IDENTITY 选项的作用。当节点有一些唯一的、通常是字符串的、对应用程序有意义的 ID 时,我们会使用它。
【讨论】:
消息的第一部分是发件人(经销商)的身份,您可以在经销商端设置,使用zmq_setsockopt功能(在连接到路由器之前)。这是一个最大 255 字符长的字符串。如果你不设置它,会有一些随机的独特的东西,从#0 char开始。
所以默认情况下它不是您的经销商的 ip+端口,但您可以根据需要将这些信息放在那里。
【讨论】: