0

我正在使用基于 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 端口需要是特定端口(由于极端的安全环境)

4

2 回答 2

1

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

在这个链接中,有一些关于如何在 ZMQ 协议中指定源 IP 和源端口的讨论——这里讨论的人是维护 ZMQ 的核心开发团队(特别是,Pieter Hintjens “创立” ZMQ),所以你可以采取从这一点来看,它在一年前还没有实施。

此外,在这里您可以看到它最终在今年 4 月实现......只要您拥有 ZMQ 的最新版本,并且您的绑定没有任何会阻止此功能的特性,您应该能够如果您遵循这些准则,请执行此操作。

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

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

同样,这可能会或可能不会被您的绑定更改。

于 2014-09-24T20:49:59.397 回答
0

这在 NetMQ 中不受支持,如果您愿意,可以尝试从 zeromq 移植该功能,它不应该很复杂,我可以帮助您。

于 2014-09-24T21:59:30.513 回答