【问题标题】:Crash in Android UDP serverAndroid UDP 服务器崩溃
【发布时间】:2015-05-03 23:25:48
【问题描述】:

更新: 我在这个 Android UDP 服务器示例中崩溃了:

    //------------------------------------------------------------
public class AsyncReceiveUdp2 extends AsyncTask<String, Void, Boolean> {
    @Override
    protected Boolean doInBackground(String... f_url) {
        int udp=111;
        String txt="";
        byte[] packet = new byte[2000];
        DatagramPacket dp = new DatagramPacket(packet, packet.length);
        DatagramSocket ds = null;
        try {
            ds = new DatagramSocket(udp);
            ds.setSoTimeout(10000);
            printLog("Ready");
            ds.receive(dp);
            printLog("Received");
            ...
        } catch (SocketException e) {
            printLog("Error1");
            e.printStackTrace();
        } catch (IOException e) {
            printLog("Error2");
            e.printStackTrace();
        } finally {
            if (ds != null) {
                ds.close();
            }
        }

        return null;
    }
}

我收到“error2”消息。 原因是“java.net.SocketTimeoutException”。 它发生在 10 秒后。 但是我从另一台计算机发送了 UDP 数据包。 嗯,我不明白它是如何工作的...... 请有任何想法!


对不起,多余的行,该网站说我的帖子主要是代码 对不起,多余的行,该网站说我的帖子主要是代码 抱歉多说一句,网站说我的帖子主要是代码

【问题讨论】:

  • 你在真机上试过了吗?
  • 你是在不同的线程上运行它吗?
  • 我们能看到 MyActivity 类的第 129 行吗?
  • 第 129 行是“ds.receive(dp);”。不,我在主线程中运行。我没有在设备上尝试过,因为必须在模拟器上调试。谢谢
  • 不要在ui线程上运行网络任务

标签: android udp


【解决方案1】:

你不能在 UI 线程上运行网络线程,Android 策略禁止它。创建一个新线程或使用 AsyncTask

【讨论】:

  • 我已经改变了,但是在“ds.receive(dp);”之后我崩溃了。嗯,我在互联网上找不到好的完整示例。谢谢
  • 即使我删除“ds.receive(dp);”之后的所有行,它也会在设备上崩溃在“抓住”之前。而且我发现在 Emulator 上获取 UDP 响应非常棘手。所以我很困惑....
  • 谢谢。它当然应该在一个新线程中工作。但它无论如何都不起作用。我已经提出了关于它的新问题。 stackoverflow.com/questions/30017771/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-12
  • 2017-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多