我尝试使用Android应用程序连接到桌面上运行的服务器。 我尝试制作一个桌面Java程序来测试连接,它使用了这段代码:
Socket socket = new Socket(HOST, PORT);
BufferedReader in = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
System.out.println(in.readLine());
它立即打印服务器欢迎消息,我可以在服务器上看到新连接。
然而,在Android上运行的相同代码(在单独的线程上)无法建立连接,最终导致套接字超时异常。
private class NetworkThread implements Runnable {
Socket socket;
@Override
public void run() {
try {
socket = new Socket(HOST, PORT);
BufferedReader in
= new BufferedReader(
new InputStreamReader(socket.getInputStream()));
textStatus.setText(in.readLine());
}catch (IOException ex){
Log.i("Network", ex.toString());
ex.printStackTrace();
}
}
}
线程在这里创建
public void onConnectBtnClick(View view) {
new Thread(new NetworkThread()).start();
}
HOST是服务器的IP,PORT是端口,在Java和Android客户端中具有相同的值。 我在我的防火墙中打开了端口,但是Android应用程序仍然无法建立连接,我得到了
java.net.ConnectException: failed to connect to GPC/192.168.1.5 (port 399): connect failed: ETIMEDOUT (Connection timed out)
清单具有INTERNET和ACCESS_NETWORK_STATE权限。我做错了什么?