Android UDP服务器不接收数据包

时间:2015-05-03 18:32:39

标签: android udp

我有以下代码来接收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;
}

}

我从Android设备向计算机发送UDP数据。 计算机立即发送响应作为UDP数据包。 我将信息保存到SD上的日志文件中。 而且我看到,我的应用程序保持在线上&#34; ds.receive(dp);&#34;并且不会在它之后运行。 我已经在Android设备上针对计算机上的程序进行了测试。 据我所知,在Emulator上接收UDP数据包很棘手。 我不能这样做。 重定向对我来说不起作用,因为它描述为here

另一个重要问题是接收发送到设备的所有数据包。无损。如何修改代码?

请帮忙!谢谢!

1 个答案:

答案 0 :(得分:0)

将你的接收放入while(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()));
}