问题:我能在手机上通过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
人家都说了,发送能够成功,服务器返回的数据接受不到。
想楼主说的,手机UDP接收端的代码在PC机上运行,能够正常接收服务端的报文,那就应该不是代码的问题,手机wifi网络时是会有一些网络映射的影响,如果真是那样,就比较麻烦了。UDP协议的传输我没有做过,但是相似的TCP下socket数据传输我以前做过,也是手机(Android)和PC通讯的,都没有问题!不行楼主可以改成TCP
#1
这个代码好像没什么问题,你把整个工程发给我帮你调试看看!1040739373@qq.com或者把发送部分也贴出来看看!
#2
你开启了权限没
#3
人家都说了,发送能够成功,服务器返回的数据接受不到。
想楼主说的,手机UDP接收端的代码在PC机上运行,能够正常接收服务端的报文,那就应该不是代码的问题,手机wifi网络时是会有一些网络映射的影响,如果真是那样,就比较麻烦了。UDP协议的传输我没有做过,但是相似的TCP下socket数据传输我以前做过,也是手机(Android)和PC通讯的,都没有问题!不行楼主可以改成TCP