Ответ 1
byte [] r = new byte[4096];
DatagramPacket dpr = new DatagramPacket(r, r.length);
sock.receive(r);
Это должно быть sock.receive(dpr);
После приема, будут ли dpr.getData() и r всегда одинаковыми?
Да. r
был предоставлен конструктору как "буфер для хранения входящей дейтаграммы", а getData()
"возвращает буфер, используемый для приема или отправки данных".
то есть. могу ли я напрямую использовать массив байтов r или мне нужно вызвать getData(), чтобы снова получить буфер?
Вы можете использовать массив байтов, но почему? Используйте getData()
, как и все остальные, не забывая также использовать getOffset()
и getLength()
, а не предполагая, что датаграмма заполнена массивом байтов: например, System.out.println(new String(datagram.getData(), datagram.getOffset(), datagram.getLength()));