Im работает на TFTP-сервере. На основе изображения максимальная длина моих пакетов составляет 516 байт (2 + 2 + 512).Как получить имя файла из DatagramPacket RRQ?
Я пытаюсь взять исходную длину от datagrampacket клиента (в этом случае отправляет 13 байт в пакете RRQ), вместо этого я получаю длину datagrampacket сервера (516 байт), где я сохраняю datagrampacket клиента.
Мне нужно, чтобы для извлечения имени файла я сделал это, но содержимое строки «filename + nullBytes», эти нулевые байты исходят от серверного datagrampacket.
Это код, где застрял им:
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);
}
http://i.stack.imgur.com/6dTH6.png
Как вы знаете, клиент на самом деле отправил только 13 байтов? Какой клиент вы используете? – JimmyB
ОК, извините его мой первый пост, работая над ним. – tec01
TFTP говорит, что «имя файла имеет нулевое завершение». Может быть, вам стоит положиться именно на это. – JimmyB