📄 stopwait.java
字号:
import datalink.*;public class Stopwait extends Protocol{ Packet buffer; // to store outstanding packet in case of time out int frameToSend; // sequence number to sue for current packet int frameExpected; // sequence number expected double timer; // time out value boolean waiting; // indicates that a packet is waiting to be sent public Stopwait( int windowsize, double timer) { super( windowsize, timer); frameToSend = 0; frameExpected = 0; waiting = false; this.timer = timer; } public void FrameArrival( Object frame) { DLL_Frame f = (DLL_Frame) frame; /* a frame has arrived from the physical layer */ /* check that it is the one that is expected */ if (f.sequence == frameExpected) { sendPacket(f.info); // valid frame // is returned to network layer */ frameExpected = 1-frameExpected; // flip bit } if( f.acknowledgement == frameToSend) /* acknowledgment has arrived */ { stopTimer(0); /* cancel timer */ enableNetworkLayer(); /* allow new packets */ frameToSend = 1-frameToSend; } } public void PacketArrival( Packet p) { DLL_Frame f; buffer = p; if ( isChannelIdle() ) { f = new DLL_Frame( frameToSend, 1-frameExpected, buffer); sendFrame( f); // send it to physical layer startTimer(0, timer); // start timer waiting = false; } else waiting = true; disableNetworkLayer(); } public void TimeOut( int code) { DLL_Frame f; if ( isChannelIdle()) { /* a frame has not been ACKed in time, */ /* so re-send the outstanding frame */ f = new DLL_Frame( frameToSend, 1-frameExpected, buffer); sendFrame( f); startTimer(0, timer); } else waiting = true; } public void CheckSumError() { // ignore check sum errors and allow frames to time out } public void ChannelIdle() { DLL_Frame f; if ( waiting ) { f = new DLL_Frame( frameToSend, 1-frameExpected, buffer); sendFrame( f); startTimer(0, timer); waiting = false; } }}class DLL_Frame { Packet info; int sequence; int acknowledgement; DLL_Frame ( int s, int a, Packet p) { info = p; sequence = s; acknowledgement = a; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -