Android UDP服务器崩溃
更新: 我在这个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) {
//------------------------------------------------------------
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响应非常棘手。所以我很困惑…谢谢你。它当然应该在一个新的线程中工作。但它无论如何都不起作用。我对此提出了新的问题。