c# - ZeroMQ/NetMQ - 是否可以定义 "client"的源端口

标签 c# c++ zeromq netmq

我正在使用基于 ZeroMq 和 NetMQ 的通信(两个项目中的问题相同)

我的应用程序在防火墙后面运行,

在服务器端很容易定义为入站流量打开哪些端口,

但是在客户端,我似乎只能指定目标(也称为服务器)地址和端口。

是否可以定义哪个端口将用于客户端应用程序的出站流量。

例如(在 NetMQ 中)

      using (NetMQContext ctx = NetMQContext.Create())
      {
         using (NetMQSocket snapshot = ctx.CreateSocket(ZmqSocketType.Dealer))
         {
           // connect to remote address, no place to specify outbound port
           snapshot.Connect("192.168.1.10:5555");   
         }
      }

在一个简单的通信场景中,我们有一个服务器和一个客户端

服务器在机器 A (192.168.1.10) 上运行 - 并监听端口 5555

客户端在机器 B (192.168.1.9) 上运行 - 并且正在启动与服务器 (A) 的通信

如果我们查看客户端上的通信信息,我们会看到系统分配了 端口 XXXXX(例如 51234)及其出站到 192.168.1.10:5555

在大多数情况下,XXXXX 端口是由系统分配的(空闲端口),但是在某些情况下 极端情况下 XXXXX 端口需要是特定端口(由于极端安全环境)

最佳答案

正如您在更新中所述,源端口通常由系统分配。我确实找到了一些关于此事的 ZMQ 特定通信:

In this link有一些关于如何在 ZMQ 协议(protocol)中指定源 IP 和源端口的讨论——这里谈论的人是维护 ZMQ 的核心开发团队(特别是 Pieter Hintjens“创立”ZMQ),所以你可以从中得到一年前还没有实现。

Further, here you can see it was eventually implemented今年 4 月...只要您拥有 ZMQ 的最新版本,并且您的绑定(bind)没有任何会阻止此功能的特性,如果您遵循这些准则,您应该能够做到这一点。

特别是,它看起来像下面这样:

snapshot.Connect("192.168.1.9:51234;192.168.1.10:5555");

同样,这可能会或可能不会被您的绑定(bind)改变。

关于c# - ZeroMQ/NetMQ - 是否可以定义 "client"的源端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26007966/

相关文章:

c# - 用 roslyn fix 替换评论(在正确的地方添加琐事)

c# - 适用于 Windows Phone 8 的 Windows Azure 通知中心无法正常工作

c# - 为什么简单程序的bin输出中有这么多DLL

c++ - 如何设置 VS Code 在 OSX 中构建、运行和调试简单的 C++ 文件?

c++ - 如何正确传递 zmq 上下文 (void *)?

c# - 无法启动带有 mod_mono 的 apache2。错误 : undefined symbol: unixd_config

c++ - 一个union需要多少内存

c++ - 模板参数的引用变量的问题

linux - 如何将项目(比如zeromq)构建为静态库并将其链接到我的项目中

ZeroMQ/ZMQ 推/拉模式的实用性