Я работаю на TFTP-сервере. Судя по изображению, максимальная длина моих пакетов составляет 516 байт (2+2+512).
Я пытаюсь взять исходную длину из пакета клиентских дейтаграмм (в данном случае отправляет 13 байтов в пакете RRQ), вместо этого я получаю длину пакета дейтаграмм сервера (516 байт), где я сохраняю пакет дейтаграмм клиента.
Мне нужно это для извлечения имени файла, я сделал это, но содержимое строки «имя файла + nullBytes», эти нулевые байты поступают из пакета датаграммы сервера.
Это код, в котором я застрял:
public static short RRQ = 1;
enter code here
public void dataMetod() throws IOException{
byte[] packet = new byte[516];
//socket with listening port 5000
DatagramSocket datagramSocket = new DatagramSocket(5000);
//while receive packets
while (true) {
DatagramPacket datagramPacket = new DatagramPacket(packet,packet.length);
datagramSocket.receive(datagramPacket);
System.out.println("server: new packet!!:");
//create a byte[] with the "received packet length"(that's not true)
byte[] inData = new byte[datagramPacket.getLength()];
inData = datagramPacket.getData();
System.out.println("length: "+inData.length);
byte code;
code = inData[1];
System.out.println(code);
//check if its an RRQ packet
if (code == RRQ) {
System.out.println("server: RRQ PACKET!!");
String fileName = this.getFileName(inData);
System.out.println(fileName);
}
public String getFileName(byte[] inData) {
byte[] aux = new byte[inData.length - 7];
for (int i = 0; i < aux.length; i++) {
aux[i] = inData[i + 2];
}
return new String(aux);
}