Android ServerSocketChannel 绑定到环回地址

问题描述 投票:0回答:1

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

SocketChannel
ServerSocketChannel

这是我在服务器设备上初始化 ServerSocketChannel 的代码: ServerSocketChannel serverSocketChannel; 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 绑定的 IP 地址。当代码执行时,输出显示 IP 地址是“127.0.0.1”。我在普通的 Java 应用程序中尝试了该代码,它打印了计算机的内部 IP 地址。当我的服务器在计算机上运行时,客户端连接成功。

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

java android timeout nio
1个回答
2
投票

InetAddress.getLocalHost().getHostAddress()
应返回
127.0.0.1
::1
或服务器本地的任何其他 IP 地址。

只需传递

null
而不是此值:这相当于
INADDR_ANY
,它允许服务器通过其任何接口接受连接。

© www.soinside.com 2019 - 2024. All rights reserved.