以下代码仅接收数据包。我发送了不同大小的数据以查看接收器上是否收到数据。我只收到第一个数据包,但没有看到其他数据包。什么可能是丢失数据包的原因。因为我每次都收到12个字节。我是否需要清除缓冲区或使其变大。我应该遵循哪些做法。仅接收一个数据包的UDP接收器代码
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();
}
}
}
如果您不知道数据包的大小,则会发生什么情况。在此代码中,字节大小为12.我测试了代码,将缓冲区大小更改为大于12,然后获得缓冲区流例外 – user1739999
使用数据报,你必须知道最大的数据包有多大。一旦你收到它,你可以用'getLength'方法检查数据包的大小。 – Joni