以下代码仅接收数据包。我发送了不同大小的数据,以查看接收器上是否正在接收数据。我只得到第一个数据包,我没有看到任何其他数据包。可能是丢失数据包的原因。因为我每次都收到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();
}
}
}
答案 0 :(得分:1)
您只收到一个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();
}
答案 1 :(得分:0)
我通过添加while循环并移动它来实现它 DatagramSocket s = new DatagramSocket(2010); byte [] data = new byte [12];在循环之外