我有以下代码接收UDP数据包:
public class AsyncReceiveUdp2 extends AsyncTask<String, Void, Boolean> {
@Override
protected Boolean doInBackground(String... f_url) {
int udp=111;
byte[] packet = new byte[2000];
DatagramPacket dp = new DatagramPacket(packet, packet.length);
DatagramSocket ds = null;
try {
ds = new DatagramSocket(udp);
ds.receive(dp);
//...
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ds != null) {
ds.close();
}
}
return null;
}
}
我将UDP数据从Android设备发送到计算机。计算机立即将响应发送为UDP数据包。我将信息保存到SD上的日志文件中。我看到,我的应用程序停留在" DS.Receive(DP)"的行上;并且不在之后运行。我已经在Android设备上针对计算机上的程序进行了测试。据我了解,在模拟器上接收UDP数据包很棘手。我做不到。重定向对我不起作用,因为此处描述了
另一个重要问题是接收已发送到设备的所有数据包。无损。如何修改代码?
请帮忙!谢谢!
将接收到一段时间(true)循环。当您收到数据包时,请调用if(pkg_received){break;} ...或任何您想做的...问题是您可能只收到一个软件包,并且在收到它之前获得了超时。
编辑而未测试的代码
while(true)
{
byte[] message = new byte[60*1024];
DatagramPacket recv_packet = new DatagramPacket(message, message.length);
try {
socket.receive(recv_packet);
} catch (IOException e) {
e.printStackTrace();
}
Log.d("UDP", "S: Receiving...listening on port " + recv_packet.getPort() );
String rec_str;
rec_str=new String(recv_packet.getData)
Log.d("PACKAGE LENGTH",Integer.toString(recv_packet.getLength()));
}