[英]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.