gpt4 book ai didi

java - UDP接收器代码只接收一个数据包

转载 作者:行者123 更新时间:2023-12-01 14:14:04 25 4
gpt4 key购买 nike

以下代码仅接收数据包。我发送了不同大小的数据以查看接收器是否正在接收数据。我只收到第一个数据包,没有看到任何其他数据包。丢失数据包的原因可能是什么。因为我每次都接收 12 个字节。我是否需要清除缓冲区或使其更大。我应该遵循哪些做法。

import java.net.DatagramSocket;
import java.net.DatagramPacket;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;

public class Reciever {
public static void main(String[] args) {
try {
DatagramSocket s = new DatagramSocket(2010);
byte[] data = new byte[12];
DatagramPacket p = new DatagramPacket(data, 12);
s.receive(p);
System.out.println("got packet");
ByteBuffer bb = ByteBuffer.allocate(12).order(ByteOrder.LITTLE_ENDIAN);
bb.put(data);
bb.rewind();
System.out.println(bb.getFloat());
System.out.println(bb.getFloat());
System.out.println(bb.getFloat());
} catch (IOException e) {
e.printStackTrace();
}
}
}

最佳答案

您只收到一个 UDP 数据包,因为您仅调用 receive 一次,然后退出。如果发送了多个数据包,您将收到一个数据包,而其他数据包将被丢弃并永远丢失。

添加一个循环以接收多个数据包:

try {
DatagramSocket s = new DatagramSocket(2010);
byte[] data = new byte[12];
DatagramPacket p = new DatagramPacket(data, 12);
while (true) {
s.receive(p);
System.out.println("got packet");
ByteBuffer bb = ByteBuffer.allocate(12).order(ByteOrder.LITTLE_ENDIAN);
bb.put(data);
bb.rewind();
System.out.println(bb.getFloat());
System.out.println(bb.getFloat());
System.out.println(bb.getFloat());
}
} catch (IOException e) {
e.printStackTrace();
}

关于java - UDP接收器代码只接收一个数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18275824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com