人生倒计时
- 今日已经过去小时
- 这周已经过去天
- 本月已经过去天
- 今年已经过去个月
本文分析了模拟器接收UDP包的几个问题。供大家参考,具体如下: 模拟器无法接收UDP数据包 代码如下: pack = null; = null;byte [] = new byte[100];try { pack = new Data
本文分析了模拟器接收UDP包的几个问题。分享给大家,供大家参考,如下:
模拟器无法接收UDP数据包
代码如下:
DatagramPacket pack = null; DatagramSocket mail_data = null; byte receiver[] = new byte[100]; try { pack = new DatagramPacket(receiver,receiver.length); mail_data = new DatagramSocket(22221); mail_data.receive(pack); } catch (Exception e) { e.printStackTrace(); }
函数无法接收数据,一直在等待。
解决方案:
1.运行模拟器
2.打开命令行
执行:5554
5554是模拟器的端口udp接收数据包方法,执行后会进入
3. 下执行:
redir 添加 udp:22221:22221
其中,第一个端口号是PC的端口,第二个端口号是模拟器端口。 (端口映射)
执行该命令后,PC的22221端口接收到的数据会被传送到模拟器的22221端口udp接收数据包方法,可以从22221端口接收UDP数据包
也就是说:模拟器上程序的UDP接收端口要设置为22221,PC服务器要向PC的IP+端口22221发送UDP包。
此时PC的22221端口被占用。
模拟器接收 UDP 数据包的几个问题
收到的UDP数据包长度和大小
因为传输协议是基于接收到的数据包,接收到的数据包是动态变化的,而且在java数据包接收之前必须定义byte[]大小,所以接收到的数据报的长度就变得固定了,所以接收到的数据报在反序列化时重复报错。
解决方法:使用.()截取实际数据报大小,然后重新定义一个这个大小的byte[]进行反序列化。
public static void main(String[] args) throws IOException { System.out.println("等待接受"); DatagramSocket datagramSocket = new DatagramSocket(8080);//指定接受信息的端口 byte[] buf = new byte[1024];//指定最大接受信息的大小 DatagramPacket datagramPacket = new DatagramPacket(buf, 1024); datagramSocket.receive(datagramPacket);//阻塞等待 String string = new String(datagramPacket.getData(), 0, datagramPacket.getLength()) + " from " + datagramPacket.getAddress().getHostAddress() + ":" + datagramPacket.getPort(); System.out.println(string); datagramSocket.close(); }
接收的UDP数据包长度限制
模拟器对数据包大小有限制!大于8k的数据(我依稀记得是8000多字节)收不到。
经过量化分析,是的,是8K(),超过模拟器就接收不到了。
它被丢弃的地方未知!
真实设备无限制。
对更多相关内容感兴趣的读者可以查看本站专题:《交流方法总结》、《调试技巧及常见问题解决方法总结》、《开发入门与进阶教程》、《总结多媒体操作技巧(音频、视频、录音等)”、“基本组件使用总结”、“视图查看技巧总结”、“布局技巧总结”和“控件使用总结”
希望这篇文章对你的编程有所帮助。