我正在使用基于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端口需要是特定端口(由于极端的安全环境)
答案 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移植该功能,它应该不复杂,我可以帮助您。