2013-05-02 94 views
0

我正嘗試在java中創建一個客戶端,以使用回退N滑動窗口通過UDP傳輸文件。我正在使用TftpPacket,但這與問題無關。我的問題是我怎樣才能做出承認控制。例如:在java上創建回滾N滑動窗口客戶端

有一個文件被分成15段,窗口的長度爲10.因此,首先發送10個segm,但包2丟失,客戶端發送10個segm,服務器只承認第一個,所以客戶端發送segm 11並停止。在超時之後,客戶端再次發送,但是這次的窗口將從段2到段11(10段窗口)定義,依此類推。

我的問題是,我無法理解如何控制窗口,因此如果最後一次接收的數據是1,並在超時後重新發送整個窗口,它會阻塞segm 11。

回答

0

我覺得你在OOP方面的想法是錯誤的。您應該有一個Window類,您可以在其中設置其長度作爲構造函數中的一個屬性,並且有兩種方法,一種用於在發送方類發送數據包時減少剩餘段,另一種用於在接收方發送一個確認段時擴展剩餘段。

在您的主課程中,您將發送數據包,每次檢查是否有空間留在窗口中。每次發送數據包時,都會調用Window對象的方法來減少其remainingSegments屬性。如果您收到接收類的確認,則調用擴展其屬性的Window對象的方法。