【发布时间】:2013-05-29 23:08:24
【问题描述】:
我有一台 Android 设备,它将运行其他 Android 设备(客户端)将连接到的服务器。我在非阻塞模式下使用SocketChannel 和ServerSocketChannel。
这是我在服务器设备上初始化 ServerSocketChannel 的代码: ServerSocketChannel 服务器SocketChannel; 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());
当客户端设备尝试连接到服务器设备时,连接超时并抛出带有 null 消息的 ConnectException。我调用Log.i() 来检查ServerSocket 绑定到的IP 地址。当代码执行时,输出显示 IP 地址为“127.0.0.1”。我在一个普通的 Java 应用程序中尝试了该代码,它打印了计算机的内部 IP 地址。当我在计算机上运行服务器时,客户端连接成功。
我认为问题在于ServerSocket绑定了环回地址,导致客户端连接失败。这是导致客户端超时的问题吗?如果是,我该如何解决?
【问题讨论】:
标签: java android timeout connect nio