Java Socket:如何在没有指定端口号的情况下将特定本地地址绑定到Socket

时间:2016-04-04 08:59:19

标签: java sockets

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

我检查了“Socket”和“InetSocketAddress”的构造函数,似乎没有一个人可以执行上述任务(即使它可以同时获取本地地址和短暂端口),并且没有方法在初始化之后这样做。

2 个答案:

答案 0 :(得分:1)

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

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

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

我所做的是有一个TCPRegistry用于测试目的。该组件负责别名端口。例如host.port1。它在服务器上为它提供了一个短暂的端口,并允许客户端使用相同的字符串连接到它。

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

最后,在测试结束时,我可以检查所有套接字和ServerSockets是否已关闭,或强行清理它们。

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

答案 1 :(得分:0)

有一个建设者

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

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