在Java中,我需要获取一个端口号,以便在同一个程序的多个实例之间进行通信。现在,我可以简单地选择一些固定的数字,并与它一起去。但是我想知道是否有一种动态选择端口号的方法,这样我就不必在设置端口号时打扰我的用户了。
我有一个想法,就是这样的:
这个策略有意义吗?还是有更好的方法动态选择端口号?
发布于 2010-02-09 18:33:38
如果绑定到端口0,Java将使用系统生成的端口.-因此,如果您想要的端口已经使用,这可能是最简单的方法。
ServerSocket s = new ServerSocket(0);
int port = s.getLocalPort(); // returns the port the system selected发布于 2010-02-09 18:33:42
我会采取逆,并选择一个固定的高端口为您的应用程序。使其成为一个配置值,以便在必要时对其进行更改。这将简化配置,因为应用程序的用户经常需要请求网络操作来打开端口。围绕IANA的分配值开展工作:
http://www.iana.org/assignments/port-numbers
对许多入侵检测系统来说,扫描端口会使你的应用程序变成一个坏公民。
发布于 2010-02-09 18:35:01
您可以使用Bonjour/ZeroConf为每个实例的服务做广告,并使一个实例能够找到其他实例。将此看作一个目录服务,可以帮助管理您的端口命名空间。
在这种情况下,每个实例都可以获取一个动态分配的端口。绑定到端口"0“的请求通常会指示系统分配一个动态端口。
https://stackoverflow.com/questions/2231467
复制相似问题