我想在Android上實現一個tcp客戶端應用程序。當我嘗試連接到我的C++服務器時,套接字在嘗試連接到服務器時超時。android-套接字連接時超時
我的代碼:
new Thread(new ClientThread()).start();
try
{
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())), true);
out.println("Test message.");
}
catch (Exception e)
{
// ERROR1
e.printStackTrace();
}
...
class ClientThread implements Runnable
{
@Override
public void run()
{
try
{
InetAddress serverAddr = InetAddress.getByName("192.168.1.116");
socket = new Socket(serverAddr, 9000);
}
catch (Exception e)
{
// ERROR2
e.printStackTrace();
}
}
}
首先,ERROR1發生(插座爲空),則發生ERROR2(連接超時)。服務器工作正常,我已經用不同的客戶端進行了測試。我有「使用許可」,所以它不應該是一個問題。
編輯: 在ERROR2堆棧:
05-17 02:26:50.789: W/System.err(26625): java.net.ConnectException: failed to connect to /192.168.1.116 (port 9000): connect failed: ETIMEDOUT (Connection timed out)
05-17 02:26:50.789: W/System.err(26625): at libcore.io.IoBridge.connect(IoBridge.java:114)
05-17 02:26:50.789: W/System.err(26625): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
05-17 02:26:50.789: W/System.err(26625): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
05-17 02:26:50.789: W/System.err(26625): at java.net.Socket.startupSocket(Socket.java:566)
05-17 02:26:50.789: W/System.err(26625): at java.net.Socket.<init>(Socket.java:225)
05-17 02:26:50.789: W/System.err(26625): at cz.gclient.gardenclient.MainActivity$ClientThread.run(MainActivity.java:153)
05-17 02:26:50.789: W/System.err(26625): at java.lang.Thread.run(Thread.java:841)
05-17 02:26:50.789: W/System.err(26625): Caused by: libcore.io.ErrnoException: connect failed: ETIMEDOUT (Connection timed out)
05-17 02:26:50.789: W/System.err(26625): at libcore.io.Posix.connect(Native Method)
05-17 02:26:50.789: W/System.err(26625): at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:85)
05-17 02:26:50.789: W/System.err(26625): at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
05-17 02:26:50.789: W/System.err(26625): at libcore.io.IoBridge.connect(IoBridge.java:112)
05-17 02:26:50.789: W/System.err(26625): ... 6 more
嗯,假設你修復了由於按錯誤順序執行操作而導致的NPE,並且在你的問題中發佈了異常和堆棧跟蹤,所以可以看到你在說什麼。 – EJP
訂單是正確的,套接字的東西必須在自己的線程...我會添加堆棧打印到原來的帖子 – 0x0000eWan
不,訂單是不正確的。在創建它所依賴的套接字之前,您正在創建PrintWriter。你爲什麼認爲你準確得到了NPE? – EJP