首页 生活指南 正文内容

本文实例分析了模拟器接收UDP数据包的若干问题(上)

阿立指南 生活指南 2022-09-12 08:09:38 376 0

本文分析了模拟器接收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();
}

函数无法接收数据,一直在等待。

解决方案:

cvi udp通信接收问题_udp一次接收大量数据_udp接收数据包方法

1.运行模拟器

2.打开命令行

执行:5554

5554是模拟器的端口udp接收数据包方法,执行后会进入

3. 下执行:

redir 添加 udp:22221:22221

其中,第一个端口号是PC的端口,第二个端口号是模拟器端口。 (端口映射)

执行该命令后,PC的22221端口接收到的数据会被传送到模拟器的22221端口udp接收数据包方法,可以从22221端口接收UDP数据包

也就是说:模拟器上程序的UDP接收端口要设置为22221,PC服务器要向PC的IP+端口22221发送UDP包。

cvi udp通信接收问题_udp接收数据包方法_udp一次接收大量数据

此时PC的22221端口被占用。

udp一次接收大量数据_udp接收数据包方法_cvi udp通信接收问题

模拟器接收 UDP 数据包的几个问题

收到的UDP数据包长度和大小

因为传输协议是基于接收到的数据包,接收到的数据包是动态变化的,而且在java数据包接收之前必须定义byte[]大小,所以接收到的数据报的长度就变得固定了,所以接收到的数据报在反序列化时重复报错。

解决方法:使用.()截取实际数据报大小,然后重新定义一个这个大小的byte[]进行反序列化。

public static void main(String[] args) throws IOException {  
 System.out.println("等待接受");  

udp一次接收大量数据_udp接收数据包方法_cvi udp通信接收问题

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(),超过模拟器就接收不到了。

它被丢弃的地方未知!

真实设备无限制。

对更多相关内容感兴趣的读者可以查看本站专题:《交流方法总结》、《调试技巧及常见问题解决方法总结》、《开发入门与进阶教程》、《总结多媒体操作技巧(音频、视频、录音等)”、“基本组件使用总结”、“视图查看技巧总结”、“布局技巧总结”和“控件使用总结”

希望这篇文章对你的编程有所帮助。

欢迎 发表评论:

文章目录
    搜索