动态选择端口号?

pyt*_*ude 7 java tcp

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

这是我的一个想法,它的工作原理如下:

  • 有一个固定的初始端口号A.
  • 程序'MyApp'启动,试图抓住端口A.
  • 如果成功,那么它就是'MyApp'的第一个实例.完成.
  • 如果失败,它会通过端口A询问A上的程序是否是"MyApp"的实例.如果是,请与该实例通信.完成.如果没有,请尝试抓住端口A + 1.如果有另一个程序使用该端口(也不是'MyApp'的实例),则抓A + 2,然后抓A + 3,依此类推.

这种策略有意义吗?或者有更好的方法来动态选择端口号吗?

Chr*_*ung 28

如果绑定到端口0,Java将使用系统生成的端口.:-)所以,如果您已经使用了所需的端口,这可能是最简单的方法.

ServerSocket s = new ServerSocket(0);
int port = s.getLocalPort();    // returns the port the system selected
Run Code Online (Sandbox Code Playgroud)

  • ......实例如何找到对方?这不是问题的全部意义吗? (3认同)