我有两个应用程序使用相同的 TCP 端口(和相同的接口)作为监控控制台,而不是应用程序的主端口。我对使用该端口不感兴趣,并且我无法更改 SO_REUSEADDR 或更改端口的源代码。
如何才能让这两个应用程序在同一个操作系统上运行?
答案1
如果内核允许这样做,它将无法知道哪个传入连接应该连接到哪个应用程序。
您应该让应用程序绑定到不同的 IP。大多数应用程序都可以执行此操作(但大多数应用程序也允许更改其端口...)
如果应用程序不允许这样做,我会在不同的网络堆栈上运行它们(两个不同的物理机,或者虚拟机,也许是docker)。
答案2
我自己没有测试过这个,但是对于 Linux,你可以为你的 NIC 设置两个不同的 IP 并使用这个bindhack
:
http://www.ryde.net/code/bind.c.txt
否则,可以使用十六进制编辑器更改二进制文件中的硬编码端口号。反汇编或在调试器中运行可能有助于找到更改它的正确位置。