繁体   English   中英

Java套接字:如何将特定的本地地址绑定到没有指定端口号的套接字

[英]Java Socket: How to bind a specific local address to a Socket without a port number specified

我想让用户可以自由选择一个特定的本地地址来连接到目标服务器,因为可能会有自定义的路由策略,但是我希望程序选择一个临时端口,而不是指定一个临时端口,因为这可能需要手动测试本地端口可用性。

我检查了“ Socket”和“ InetSocketAddress”的构造函数,似乎它们都没有一个可以完成上述任务(即使它可以同时拾取本地地址和临时端口),也没有方法可以做到这一点。初始化后。

您可以创建一个Socket,然后在其上调用connect。

Socket socket = new Socket(); // no idea where to connect

socket.connect(addressAndPort); // now I know.

我要做的是拥有一个TCPRegistry以进行测试。 该组件负责别名端口。 例如host.port1 它为服务器提供了一个临时端口,并允许客户端使用相同的字符串连接到它。

注意:为了允许客户端在服务器之前启动,我可以要求它在单元测试中预先构建这些ServerSocket。

最后,在测试结束时,我可以检查所有Socket和ServerSocket均已关闭,也可以强制清理它们。

它是为NIO设计的,但可以适用于普通IO TCPRegistry

有一个承包商

public Socket(InetAddress address,
  int port,
  InetAddress localAddr,
  int localPort)
   throws IOException

应该适合您的要求。 如果localPort为0,则系统将选择一个空闲端口。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM