【问题标题】:android - socket timeout while connectingandroid - 连接时的套接字超时
【发布时间】:2014-07-05 12:22:07
【问题描述】:

我正在尝试在 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(套接字为空),然后出现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,这是由于以错误的顺序执行操作引起的,并在您的问题中发布异常和堆栈跟踪,以便查看您在说什么。
  • 顺序正确,socket的东西必须在自己的线程中...我将在原始帖子中添加堆栈打印
  • 不,顺序不对。在创建它所依赖的套接字之前,您正在创建 PrintWriter。为什么你认为你得到了 NPE?

标签: android sockets


【解决方案1】:

“连接超时”是网络连接问题。例如,可能有防火墙。这不是编程问题,你无法用代码解决。

【讨论】:

  • 我用我的平板电脑连接到另一个网络...我太傻了 :D 谢谢 :)
猜你喜欢
  • 2012-11-17
  • 2016-10-02
  • 1970-01-01
  • 2011-05-11
  • 1970-01-01
  • 2013-05-23
  • 2011-02-05
  • 2018-11-26
相关资源
最近更新 更多