以下代碼僅接收數據包。我發送了不同大小的數據以查看接收器上是否收到數據。我只收到第一個數據包,但沒有看到其他數據包。什麼可能是丟失數據包的原因。因爲我每次都收到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