gpt4 book ai didi

java - Android ServerSocketChannel 绑定(bind)回环地址

转载 作者:行者123 更新时间:2023-11-29 21:41:58 27 4
gpt4 key购买 nike

我有一个 Android 设备,它将运行一个服务器,其他 Android 设备(客户端)将连接到该服务器。我在非阻塞模式下使用 SocketChannelServerSocketChannel

这是我在服务器设备上初始化 ServerSocketChannel 的代码: ServerSocketChannel serverSocketChannel; ServerSocket serverSocket;

        InetSocketAddress address = new InetSocketAddress(InetAddress.getLocalHost().getHostAddress(), 10000);

serverSocketChannel = ServerSocketChannel.open();
serverSocketChannel.configureBlocking(false);

serverSocket = serverSocketChannel.socket();
serverSocket.bind(address);

serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);

Log.i("AdminNetwork", serverSocket.getInetAddress().getHostAddress());

当客户端设备尝试连接到服务器设备时,连接超时并抛出带有空消息的 ConnectException。我调用 Log.i() 来检查 ServerSocket 绑定(bind)到的 IP 地址。当代码执行时,输出显示 IP 地址为“127.0.0.1”。我在普通的 Java 应用程序中尝试了代码,它打印了计算机的内部 IP 地址。当我在计算机上运行服务器时,客户端连接成功。

我认为问题是 ServerSocket 绑定(bind)了环回地址,导致客户端连接失败。这是导致客户端超时的问题吗?如果是,我该如何解决?

最佳答案

这是一种可能性。 InetAddress.getLocalHost().getHostAddress() 可以返回 127.0.0.1::1 或服务器本地的任何其他 IP 地址.

只需传递 null 而不是这个值:这等同于 INADDR_ANY,它允许服务器通过其任何接口(interface)接受连接。

关于java - Android ServerSocketChannel 绑定(bind)回环地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16825403/

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