我使用mac TFTP客户端来使用我的TFTP Java服务器。
无论客户端请求什么(在这种情况下是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客户端有任何经验,我将非常感谢任何建议。
答案 0 :(得分:0)
实际上,最后一个数据包应该正好是512字节而不是更少。检查它是否是最后一个包,然后执行此操作;
DatagramPacket data = new DatagramPacket(wrap.array(),512);
我认为这个解决了你的问题。