ZeroMQ / NetMQ - 是否可以定义"客户端的源端口"

时间:2014-09-24 03:17:13

标签: c# c++ zeromq netmq

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

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

在服务器端,可以轻松定义要为入站流量打开的端口,

然而在客户端,似乎我只能指定目标(a.k.a服务器)地址和端口。

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

例如

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

2 个答案:

答案 0 :(得分:1)

正如您在更新中所述,源端口通常由系统分配。我确实在这个问题上找到了一些ZMQ特定的沟通:

In this link讨论了如何在ZMQ协议中指定源IP和源端口 - 这里的人都是维护ZMQ的核心开发团队(特别是Pieter Hintjens“创建了”ZMQ) ,所以你可以从中获取它在一年前没有实现。

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

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

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

同样,这可能会也可能不会因你的约束而改变。

答案 1 :(得分:0)

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