我正在使用基于 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/