2016-03-07 62 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);

我覺得這個解決了你的問題。

相關問題