2016-03-07 28 views
0

我正在使用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客户端的经验,我会为任何建议非常感谢。

回答

0

实际上最后一个数据包应该完全是512字节不能少于。检查它是否是最后一个包,然后执行此操作;

DatagramPacket data = new DatagramPacket(wrap.array(),512);

我觉得这个解决了你的问题。

相关问题