2014-05-16 230 views
6

我想在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 
+0

嗯,假設你修復了由於按錯誤順序執行操作而導致的NPE,並且在你的問題中發佈了異常和堆棧跟蹤,所以可以看到你在說什麼。 – EJP

+0

訂單是正確的,套接字的東西必須在自己的線程...我會添加堆棧打印到原來的帖子 – 0x0000eWan

+0

不,訂單是不正確的。在創建它所依賴的套接字之前,您正在創建PrintWriter。你爲什麼認爲你準確得到了NPE? – EJP

回答

11

'連接超時' 是一個網絡連接問題。例如,可能有防火牆。這不是一個編程問題,你不能在代碼中解決它。

+1

我用我的平板電腦連接到另一個網絡...我很愚蠢:D謝謝:) – 0x0000eWan

+1

@ 0x0000eWan DOH!我的無線網關了,並使用4G ... –