Android - 连接时套接字超时

7

我正在尝试在Android上实现一个TCP客户端应用。当我尝试连接我的C++服务器时,套接字在尝试连接服务器时超时。

我的代码:

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(socket为null)的错误,然后会出现ERROR2(连接超时)。服务器正常工作,我已经通过不同的客户端进行了测试。 我有“uses-permission”,所以这不应该是问题。

编辑: 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,并在问题中发布异常和堆栈跟踪,以便我们可以看到您在谈论什么。 - user207421
顺序没问题,套接字必须在自己的线程中运行...我会在原帖中添加堆栈打印。 - 0x0000eWan
不,顺序不对。你在创建依赖于套接字的PrintWriter之前就已经创建了套接字。你认为你为什么会得到NPE呢? - user207421
1个回答

12

'连接超时'是一个网络连接问题。例如,可能存在防火墙。这不是编程问题,无法在代码中解决。


1
我之前用平板连接到了其他网络... 我真是太蠢了 :D 谢谢 :) - 0x0000eWan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接