Android ServerSocketChannel绑定到环回地址

时间:2013-05-29 23:08:25

标签: java android timeout connect nio

我有一台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绑定的IP地址。当代码执行输出时,IP地址为“127.0.0.1”。我在普通的Java应用程序中尝试了代码,并打印了计算机的内部IP地址。当我在计算机上运行服务器时,客户端连接成功。

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

1 个答案:

答案 0 :(得分:2)

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

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