TFTP客户端无法识别最后一个数据包何时发送
问题描述:
我正在使用TFTP客户端来使用TFTP Java服务器。TFTP客户端无法识别最后一个数据包何时发送
无论从客户端请求什么(在这种情况下是一个txt文件),它都应该被读取和重写。但是,我遇到了一个问题,客户端似乎没有意识到最后一个数据包已经发送,在这种情况下,会话应该由TFTP客户端关闭(至少据我所知)。
这是读取请求文件并检查数据包是否小于512字节的通用代码库,在这种情况下,它应该是最后一个数据包,客户端应关闭会话。客户继续工作直到转移时间超时。
int length = fileInputStream.read(buf);
ByteBuffer wrap = ByteBuffer.allocate(BUFSIZE);
wrap.putShort((short) OP_DAT);
wrap.putShort((short) blockNumber);
wrap.put(buf);
DatagramPacket data = new DatagramPacket(wrap.array(), wrap.array().length);
sendSocket.send(data);
byte[] rec = new byte[BUFSIZE];
DatagramPacket receivePacket = new DatagramPacket(rec, rec.length);
sendSocket.receive(receivePacket);
short comp = getAcknowledgment(receivePacket);
if(comp == (short) blockNumber){
System.out.println("Length of sent packet: " + length);
return length < 512;
}
return true;
如果任何人有使用的是Mac OS X TFTP客户端的经验,我会为任何建议非常感谢。
答
实际上最后一个数据包应该完全是512字节不能少于。检查它是否是最后一个包,然后执行此操作;
DatagramPacket data = new DatagramPacket(wrap.array(),512);
我觉得这个解决了你的问题。