gpt4 book ai didi

java - 为什么我们必须使用 InetSocketAddress 来输入我们的端口号才能使用 ServerSocketChannel

转载 作者:行者123 更新时间:2023-12-02 03:56:38 31 4
gpt4 key购买 nike

为什么我们必须创建一个InetSocketAddress对象?

但是对于ServerSocket,我们只需使用int来输入端口号

示例:

    try(
ServerSocketChannel listener = ServerSocketChannel.open();
ServerSocket serverSocket = listener.socket()
){

serverSocket.bind(new InetSocketAddress(2266));
//we can't use serverSocket.bind(2266);

}catch (IOException e){

e.printStackTrace();
}

最佳答案

你的问题有点不清楚。

ServerSocket#bind() 建立连接的本地端。如果您的系统有多个网络适配器和/或多个 IP 地址,并且您想使用特定的本地适配器或 IP 地址连接套接字,那么您需要提供完整的 InetSocketAddress(host,port) 包含主机和端口,其中主机部分是您的本地 IP 地址之一。

在默认情况下,您只有一个 IP 地址,或者有多个 IP 地址但不关心哪一个用作源,您可以省略主机并仅指定端口,如示例中所示。

API 是这样定义的。 TCP 连接是对称的,并由其两个端点定义。端点是一对(主机,端口)。这适用于连接的两端。因此,bind() 调用采用一个 InetSocketAddress 参数。为了方便起见,如果您仅提供端口,InetSocketAddress 将采用指定“使用任何可用接口(interface)”的默认主机。

API 设计者可以添加一个 bind(int port) 方法来在幕后构建 InetSocketAddress(port),但显然觉得没必要。

关于java - 为什么我们必须使用 InetSocketAddress 来输入我们的端口号才能使用 ServerSocketChannel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35389411/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com