我试图在java中创建一个客户端,使用Go-back-N滑动窗口通过UDP传输文件。我正在使用TftpPacket,但这与问题无关。我的问题是我如何能够使承认控制。例子:
有一个文件被分成15段,窗口长度为10。所以首先它会发送10段,但是包2丢失了,所以客户端发送10段,服务器只承认第一个,所以客户端发送11段并停止。超时后,客户端再次发送,但这次窗口将从第2段定义为第11段(10段窗口),以此类推。
我的问题是,我无法理解如何控制窗口,所以它在segm 11上阻塞,如果最后收到的ack是1,并在超时后重新发送整个窗口。
我认为您在OOP方面的思考方式是错误的。您应该有一个Window
类,您可以将其长度设置为构造函数中的属性,并且有两个方法,一个用于在发送方类发送数据包时减少剩余的段,另一个用于在接收方发送确认时扩展剩余的段。
在你的主类中,你发送数据包,每次检查你的窗口是否还有空间。每次发送数据包时,调用Window对象的方法减少其remainingSegments
属性。如果你从接收类收到一个确认,你调用扩展了它的remainingSegments
属性的Window对象的方法。