0MQ-获取消息ip
0MQ - get message ip
首先,我要感谢您的精彩库!我喜欢它。一个客户正在将自己连接到服务器。服务器应该保存IP并在以后处理它(我真的需要IP)。我找到了答案:http://lists.zeromq.org/pipermail/zeromq-dev/2010-September/006381.html但我不明白我是如何从消息中获得IP的(XREP)。。。我想我只能读取ID,但IP由0MQ内部管理。他的第二个解决方案建议将IP作为信息的一部分发送,但我不明白如何获得"公共"IP。我发现那篇文章:在ZeroMQ 中获取TCP地址信息
is pass bind a service to an ephemeral port, get a full connection endpoint ("tcp://ipaddress:port")
我不明白这是怎么回事。他的意思是网络服务吗?在我看来,最好将IP从0MQ中取出(它已经有了IP)。我甚至会为此调整0MQ,如果有人能指出IP保存的地方,但找不到它。套接字类型目前并不那么重要。我更喜欢smth REQ-REP。非常感谢。
摘要:
TL;DR对您的问题的回答是:您无法使用ZeroMQ API获取发送消息的对等方的IP地址。
解释:
ZeroMQ不公开对等IP地址,因为它与ZeroMQ设计用于的基于消息的通信无关。当ZeroMQ可以获取连接到服务器的客户端(在示例中使用此处描述的方法)的IP地址时,这是无用的。更详细的解释是它如何在ZeroMQ和任何其他服务器实现中工作。
连接的服务器端不会通过将IP映射到客户端的哈希表来处理连接的客户端,而是通过跟踪连接的"套接字"(套接字描述符)-当服务器接受(使用accept())连接时,它会从操作系统接收套接字描述符,用于与连接的对等方通信。服务器所要做的就是保留描述符,以便从客户端读取()和向客户端写入()。连接到服务器的另一个客户端接收另一个套接字描述符。
总之:即使ZeroMQ能够为您提供连接对等体的IP,您也不应该依赖它。ZeroMQ对您隐藏了连接管理,因此您可以专注于消息传递。连接管理包括重新连接,这可能会导致IP的更改,而不会更改另一端连接的实际ZeroMQ套接字。
因此,这里有一个示例,说明您可能想要获得消息传递的ip地址:我们有一个服务器,其工作是将更新同步到偶尔连接的客户端上(想想这里的移动设备,尽管这是移动设计的一个极端示例。)
当移动设备接入网络时,它会通过经销商路由器连接向服务器发送一份固件文件列表。服务器具有所有适用固件文件的列表;如果客户端需要更新,它将通过单独的机制启动更新。
由于设备的IP可以(而且确实)更改,我们需要知道与移动设备相关的IP地址,即现在。
是的,我们绝对可以让客户端在消息中发送它的IP地址,但这又浪费了n字节宝贵的卫星广播时间,虽然不是纯粹的邪恶,但肯定很烦人。Zmq已经有了这些信息,如果没有这些信息,它将无法生成回复。地址在套接字数据中,没有理由不在消息中(可选地,对于所有使用有线网络并认为断开连接是例外的人来说)包含对套接字结构的引用,这样你就可以从中获取地址。除了迂腐的宗教信仰,这在zmq中太常见了。
ZeroMQ的设计方式没有提供有关远程IP的信息。据我所知,你必须通过你的应用程序来管理这一点,将信息作为某种信息发送
消息本身使用IP不可知的ID,与任何特定接口相比,该ID与ZeroMQ实例的运行关系更大。这是因为连接这两个实例的传输方法和接口可能不止一个。
- boost::进程间消息队列引发错误
- 在线编译器中的分段C++没有打印消息
- C++错误消息*成员参考.**初学者*
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 如何通过参数抛出错误消息
- 从服务器传输到客户端的消息不会出现
- ROS2 动态消息模板
- 我正在开发服务器,ip作为参数传递不起作用
- C++秘密消息学校作业
- 如何使用 Boost Asio 在 Android 上获取我的本地 udp IP 地址?
- glad 导致 glfwSwapBuffers 返回错误消息
- 我可以与 python 服务器而不是 c++ 客户端建立 tcp/ip 套接字吗?
- C++入门 5 版:类消息和文件夹
- FindPackageHandleStandardArgs.cmake:137 的 CMake 错误(消息):找不到 Boost (缺少:正则表达式)(找到合适的版本"1.72.0",
- 如何处理从一个对象传递到另一个在C++中具有公共抽象类的对象的消息
- 如何接受 [ENTER] 键作为无效输入并发送错误消息
- 由于无效的 ValidateRgn() 子窗口不会收到WM_PAINT消息
- 0MQ-获取消息ip
- 我的程序不发送消息或没有接收到套接字,ip是127.0.0.1