首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态选择端口号?

动态选择端口号?
EN

Stack Overflow用户
提问于 2010-02-09 18:29:12
回答 3查看 15K关注 0票数 7

在Java中,我需要获取一个端口号,以便在同一个程序的多个实例之间进行通信。现在,我可以简单地选择一些固定的数字,并与它一起去。但是我想知道是否有一种动态选择端口号的方法,这样我就不必在设置端口号时打扰我的用户了。

我有一个想法,就是这样的:

  • 有一个固定的初始端口号A。
  • 程序“MyApp”启动,试图抢占端口A。
  • 如果它成功了,那么它就是'MyApp‘的第一个实例。好了。
  • 如果失败,它会询问端口A上的程序是否是'MyApp‘的实例。如果是,请与该实例通信。好了。如果没有,尝试获取端口A+1,如果有另一个程序使用该端口(也不是'MyApp‘的实例),那么获取A+2,然后是A+3,等等。

这个策略有意义吗?还是有更好的方法动态选择端口号?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-02-09 18:33:38

如果绑定到端口0,Java将使用系统生成的端口.-因此,如果您想要的端口已经使用,这可能是最简单的方法。

代码语言:javascript
复制
ServerSocket s = new ServerSocket(0);
int port = s.getLocalPort();    // returns the port the system selected
票数 28
EN

Stack Overflow用户

发布于 2010-02-09 18:33:42

我会采取逆,并选择一个固定的高端口为您的应用程序。使其成为一个配置值,以便在必要时对其进行更改。这将简化配置,因为应用程序的用户经常需要请求网络操作来打开端口。围绕IANA的分配值开展工作:

http://www.iana.org/assignments/port-numbers

对许多入侵检测系统来说,扫描端口会使你的应用程序变成一个坏公民。

票数 3
EN

Stack Overflow用户

发布于 2010-02-09 18:35:01

您可以使用Bonjour/ZeroConf为每个实例的服务做广告,并使一个实例能够找到其他实例。将此看作一个目录服务,可以帮助管理您的端口命名空间。

在这种情况下,每个实例都可以获取一个动态分配的端口。绑定到端口"0“的请求通常会指示系统分配一个动态端口。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2231467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档