我想启动一个监听端口的服务器。我可以明确指定端口并且它可以工作。但我想以自动方式找到一个端口。对此我有两个问题。
我应该在哪个范围的端口号中搜索? (我使用端口 12345、12346 和 12347,都很好)。
如何查明某个端口是否被其他软件占用?
如果您不介意所使用的端口,请将端口指定为 0ServerSocket 构造函数它会监听任何空闲端口。
ServerSocket s = new ServerSocket(0);
System.out.println("listening on port: " + s.getLocalPort());
如果您想使用一组特定的端口,那么最简单的方法可能是迭代它们直到其中一个可以工作。像这样的东西:
public ServerSocket create(int[] ports) throws IOException {
for (int port : ports) {
try {
return new ServerSocket(port);
} catch (IOException ex) {
continue; // try next port
}
}
// if the program gets here, no port in the range was found
throw new IOException("no free port found");
}
可以像这样使用:
try {
ServerSocket s = create(new int[] { 3843, 4584, 4843 });
System.out.println("listening on port: " + s.getLocalPort());
} catch (IOException ex) {
System.err.println("no available ports");
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)