在创建客户端时,如何知道为 Java 中的 Socket 对象选择的有效端口是什么?
例如,我尝试过Socket("localhost", 0)
.
但是,由于无法绑定到端口,我最终抛出异常。
我知道当端口为0时ServerSocket绑定到任何空闲端口。初始化套接字时客户端是否有类似的设置?
从JavaDocs:
public Socket(InetAddress address, int port)
throws IOException
字符串不是InetAddress
. 用于从字符串InetAddress.getByName()
创建一个InetAddress
(确保字符串是网站的主机名)。
注意:您不能总是自由地选择要使用的端口,在某些系统上,可能有一些范围被保留并被认为是用户应用程序的禁区。
客户端需要知道服务器正在监听哪个端口。What Is a Socket?有详细的解释。以及Read from and Writing to a Socket中的示例代码。
该参数指定要连接的目标端口,而不是要绑定的本地端口。本地端口是自动分配的,你不用担心。您确实需要知道要连接到哪个服务器端口。对目标(连接)端口使用零是没有意义的。