我有一個Android設備將運行一個服務器,客戶端將連接到其他Android設備。我在非阻塞模式下使用SocketChannel
和ServerSocketChannel
。Android ServerSocketChannel綁定到回送地址
這是我的代碼,用於初始化服務器設備上的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綁定到環回地址,導致客戶端連接失敗。這是導致客戶超時的問題嗎?如果它是我如何解決它?
測試它和客戶端連接。謝謝! – jakeprogrammer