安卓手机,真机调试接收不到UDP报文

时间:2021-11-04 01:00:05
背景:Eclipse开发安卓程序,用USB连接手机,直接真机调试。手机是三星盖世3,版本号:4.0.4

问题:我能在手机上通过WIFI发送UDP包,服务端能正常接收。但是服务端回送的UDP报文手机确无法接收到。         手机和服务器都属于同一网段。一个UDP包在一百个字节左右。

PS:我把手机UDP接收端的代码在PC机上运行,能够正常接收服务端的报文。但是在手机上调试的时候,         就卡在了server.receive(recvPacket);这句话上。

我查了蛮多帖子,感觉蛮多人遇到了类似的问题,有说是需要端口映射,但我这里是真机调试。
这到底是与手机相关还是软件写得不对。

代码:我贴出UDP接收的部分代码,请大牛们指点迷津,这段代码运行在新起的线程中。


        WifiManager wifi;
        wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
        MulticastLock ml = wifi.createMulticastLock("test wifi");
        ml.acquire();

        DatagramSocket  server = new DatagramSocket(8989);
        

        byte[] recvBuf = new byte[1500];
        DatagramPacket recvPacket 
            = new DatagramPacket(recvBuf , recvBuf.length);

        try {
         server.receive(recvPacket);
        } catch(IOException e){
         throw e;
        }
        String recvStr = new String(recvPacket.getData() , 0 , recvPacket.getLength());
        server.close();
        
        ml.release();

4 个解决方案

#1


这个代码好像没什么问题,你把整个工程发给我帮你调试看看!1040739373@qq.com或者把发送部分也贴出来看看!

#2


你开启了权限没

#3


引用 2 楼 siyehua 的回复:
你开启了权限没


人家都说了,发送能够成功,服务器返回的数据接受不到。
想楼主说的,手机UDP接收端的代码在PC机上运行,能够正常接收服务端的报文,那就应该不是代码的问题,手机wifi网络时是会有一些网络映射的影响,如果真是那样,就比较麻烦了。UDP协议的传输我没有做过,但是相似的TCP下socket数据传输我以前做过,也是手机(Android)和PC通讯的,都没有问题!不行楼主可以改成TCP

#1


这个代码好像没什么问题,你把整个工程发给我帮你调试看看!1040739373@qq.com或者把发送部分也贴出来看看!

#2


你开启了权限没

#3


引用 2 楼 siyehua 的回复:
你开启了权限没


人家都说了,发送能够成功,服务器返回的数据接受不到。
想楼主说的,手机UDP接收端的代码在PC机上运行,能够正常接收服务端的报文,那就应该不是代码的问题,手机wifi网络时是会有一些网络映射的影响,如果真是那样,就比较麻烦了。UDP协议的传输我没有做过,但是相似的TCP下socket数据传输我以前做过,也是手机(Android)和PC通讯的,都没有问题!不行楼主可以改成TCP