【问题标题】:Android Socket ConnectionsAndroid 套接字连接
【发布时间】:2016-04-16 11:48:37
【问题描述】:

尝试运行循环以检查 IP 是否打开。

for (int z = 0; z < 100; z++) {
    String ip = "10.0.0." + z;
        try {
            log(ip);
            Socket socket = new Socket(ip, MainActivity._util.getPort());
            // Handle Stuff when Exception NOT throw
        } catch (Exception e) {
        }
}

log 是我做的一个函数(没有错误)

.getPort() 只是我定义的“全局”端口号 EDIT:返回 2683(只是一个随机数)

它应该只是捕获异常,然后继续执行 for 循环,但这并没有发生。

目前这只是打印:

10.0.0.0

10.0.0.1

然后冻结。

如果有人有任何建议,那就太好了!

编辑

  • 使用 socket.connect(new InetSocketAddress(ip, port), timeout) 方法仍然没有正确处理

  • 这是在 AsyncTask 扩展类中,在 doInBackground() 方法中

【问题讨论】:

  • 您在此处获得的端口:***MainActivity._util.getPort()*** 当您在 for 循环中时,该 int 是否有可能更改其值???
  • ip为false时可能会例外?
  • @jgm 假 IP 是什么意思?
  • 首先,尽量不要在每次迭代时创建套接字。此外,有一个 finally { socket.close() }
  • 你在哪里调用这个代码?它在活动吗?

标签: java android sockets exception freeze


【解决方案1】:

没有套接字服务器来监听这些 IP 和端口。所以你的套接字客户端将被冻结。如here 所述,您应该为套接字使用另一个构造函数并设置超时以防止冻结。

for (int z = 0; z < 100; z++) {
    String ip = "10.0.0." + z;
        try {
            log(ip);
            Socket socket = new Socket();
            socket.connect(new InetSocketAddress(ip, MainActivity._util.getPort()), 1000);
            // Handle Stuff when Exception NOT throw
        } catch (Exception e) {
        }
}

【讨论】:

    猜你喜欢
    • 2013-12-26
    • 1970-01-01
    • 2014-03-27
    • 2012-11-17
    • 2016-10-02
    • 2016-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多