Android代码未接收UDP数据包

Android代码未接收UDP数据包,android,udp,Android,Udp,此Android代码未接收数据包。该代码基于一些运行良好的java代码。有人能提供意见吗?可能是什么问题。我们没有在模拟器上运行,所以这不是人们遇到的模拟器问题。发送方应用程序使用android平板电脑wi-fi平板电脑地址以及发送方和接收方的udp端口匹配 可能是应用程序正在丢弃数据包 import java.net.DatagramPacket; import java.net.DatagramSocket; import java.nio.ByteBuffer; import java.n

此Android代码未接收数据包。该代码基于一些运行良好的java代码。有人能提供意见吗?可能是什么问题。我们没有在模拟器上运行,所以这不是人们遇到的模拟器问题。发送方应用程序使用android平板电脑wi-fi平板电脑地址以及发送方和接收方的udp端口匹配

可能是应用程序正在丢弃数据包

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;

public class NetworkServer extends Thread
{

   DatagramSocket mSocket = null;   
   boolean isFinish = false;

   private SimplestPossibleActivity activity;

   public NetworkServer(SimplestPossibleActivity activity)
   {
    this.activity = activity;
   }

   public void run() 
   {

      try 
      {

        Log.d("UDP", "Listening");
        mSocket = new DatagramSocket( 2010); //4444
        mSocket.setBroadcast(true);

        while (!isFinish) 
        {

           Log.d("UDP", "C: socket create success");
           byte[] recvbuffer = new byte[12];
           DatagramPacket packet = new DatagramPacket(recvbuffer,recvbuffer.length);
           Log.d("UDP", "receiving...");
           mSocket.receive(packet);
           Log.d("UDP", "received packet");

           ByteBuffer bb = ByteBuffer.allocate(recvbuffer.length).
                                       order(ByteOrder.LITTLE_ENDIAN);
           bb.put(recvbuffer);
           bb.rewind();
           //System.out.println(bb.getFloat());
           //System.out.println(bb.getFloat());
           //System.out.println(bb.getFloat());

           // byte[] buffer = packet.getData();
           //  String msg = new String(buffer);

           // bundle data to send to message handler
           Bundle data = new Bundle();
           data.putFloat("latitude",  bb.getFloat());
           data.putFloat("longitude", bb.getFloat());
           data.putFloat("altitude",  bb.getFloat());

           Message msgHandle = new Message();
           msgHandle.setData(data);
           mhandler.sendMessage(msgHandle);

       } //end while
     } catch (Exception e) {
         Log.e("UDP", "C: Error", e);
     }

   }

   private Handler mhandler = new Handler() 
   {

        @Override
        public void handleMessage(Message msg) 
        {
           float lat;
           float lon;
           float alt;

           Bundle data = msg.getData();
           Log.d("NetworkServer","adding position" + "lat = " + data.getFloat("latitude") +
                                 "lon = " + data.getFloat("longitude") + 
                                 "alt = " + data.getFloat("altitude"));
           activity.addPosition(data.getFloat("latitude"), 
                               data.getFloat("longitude"), 
                               data.getFloat("altitude"));

    }

   };
}

我见过安卓系统不接受肯定是广播的UDP数据包。我仍在努力确定这个问题

包含的服务器代码应该可以。recvbuffer是预期数据的正确大小,我假设如果它实际接收UDP数据包,您会解释任何遇到的错误。这意味着,无论您的用例是什么,UDP数据包都不会被服务器接收,因为它没有被发送,或者被中断

1) 我相信你是在PC上使用sender应用程序,而不是Android设备。(“发送方应用程序使用的是android平板电脑wi-fi平板电脑地址以及发送方和接收方的udp端口匹配。”)如果是这种情况,请安装Wireshark并侦听发送的udp数据包。确认数据包确实正在发送

2) 我假设您没有在同一台PC上测试原始Java代码。例如,接收方和发送方在同一台PC上。您是否在安卓接收方应用程序的PC上测试发送方

3) 我还假设您在AndroidManifest.xml文件中具有正确的最低Android权限。e、 g.如果你是多播UDP,你需要做的不止这些,但我不相信你是

声称数据包被丢弃的唯一方法是确定它们实际上被发送到了网络中。(如果可能的话)您的数据包大小非常小,没有理由认为任何路由器会根据大小限制丢弃数据包

尝试提交客户机代码,并解释您的测试场景是如何准确工作的。

可能重复的