Android UDP服务器崩溃

Android UDP服务器崩溃,android,udp,Android,Udp,更新: 我在这个Android UDP服务器示例中遇到崩溃: //------------------------------------------------------------ public class AsyncReceiveUdp2 extends AsyncTask<String, Void, Boolean> { @Override protected Boolean doInBackground(String... f_url) {

更新: 我在这个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;
    }
}
//------------------------------------------------------------
公共类AsyncReceiveUdp2扩展了AsyncTask{
@凌驾
受保护的布尔doInBackground(字符串…f_url){
int-udp=111;
字符串txt=“”;
字节[]数据包=新字节[2000];
DatagramPacket dp=新的DatagramPacket(数据包,数据包.长度);
DatagramSocket ds=null;
试一试{
ds=新的DatagramSocket(udp);
ds.setSoTimeout(10000);
打印日志(“就绪”);
ds.接收(dp);
打印日志(“收到”);
...
}捕获(SocketException e){
打印日志(“错误1”);
e、 printStackTrace();
}捕获(IOE异常){
打印日志(“错误2”);
e、 printStackTrace();
}最后{
如果(ds!=null){
ds.close();
}
}
返回null;
}
}
我收到我的“错误2”信息。 原因是“java.net.SocketTimeoutException”。 它发生在10秒之后。 但我从另一台计算机发送了UDP数据包。 嗯,我不明白它是怎么工作的。。。。 有什么想法吗


很抱歉加了一行,网站上说我的帖子大部分是代码 很抱歉加了一行,网站上说我的帖子大部分是代码
很抱歉加了一句话,网站说我的帖子大部分是代码,你不能在UI线程上运行网络线程,Android政策禁止这样做。创建一个新线程或使用AsyncTask

您是否在实际设备上尝试过?您是否在其他线程上运行它?我们可以看到MyActivity类的第129行吗?第129行是“ds.receive(dp);”。不,我在主线程中运行。我没有在设备上尝试,因为必须在模拟器上调试。谢谢不要在ui线程上运行网络任务我已更改,但在“ds.receive(dp);”之后崩溃。嗯,我在网上找不到好的完整例子。ThanksIt在设备上崩溃,即使我在“catch”之前删除了“ds.receive(dp);”之后的所有行。我发现在Emulator上获得UDP响应非常棘手。所以我很困惑…谢谢你。它当然应该在一个新的线程中工作。但它无论如何都不起作用。我对此提出了新的问题。