我正在andorid 上创建一个UDP 服务。为清楚起见,此处复制的部分代码:
byte[] message = new byte[1500];
DatagramPacket packet = new DatagramPacket(message, message.length);
socket = new DatagramSocket(Constants.LISTENING_PORT_NUMBER);
socket.receive(packet);
问题是我不断地接收 UDP 数据包。例如数据包#1(250 字节长)、数据包#2(182 字节长)、数据包#3(403 字节长)等...
我需要获取并处理具有可变长度的单独 UDP 数据包。根据 UDP 协议规范,UDP 数据包定义了消息边界。但是我在 Java 中没有找到可以分离 UDP 数据包的解决方案。
在我当前的解决方案中,我必须定义我必须读取的数据包长度,但在收到它之前我不知道数据包长度。
我错过了一点吗?
编辑: 感谢 Tobias 和 shazin 都是正确的答案。可悲的是,我不能将两个答案标记为正确。
将socket.receive(packet);
接收到 UDP 数据包边界,随后的数据包可以与另一个socket.receive(packet);
.
我的问题应该是在第一条消息的过程中,由于同步处理,到达的进一步消息没有被处理,现在我将消息处理传递给异步任务,希望能够及时捕获所有到达的数据包。