Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package arq;
- import java.net.DatagramPacket;
- import comm.MyFrame;
- import comm.TxRx;
- public class receiver {
- public static void main(String[] args) {
- if (args.length != 4) {
- System.out.println("Usage: receiver windowSize maxSeq localPort debug");
- System.exit(-1);
- }
- DatagramPacket packet;
- int nextFrame = 0;
- int maxSeq = Integer.parseInt(args[1]);
- int windowSize = Integer.parseInt(args[0]);
- int framesNotAnswered = 0;
- boolean sendControl;
- MyFrame frame;
- MyFrame control;
- TxRx txrx = new TxRx(Integer.parseInt(args[2]));
- boolean debug;
- if (Integer.parseInt(args[3]) == 0)
- debug = false;
- else
- debug = true;
- while (true){
- if (debug)
- System.out.println("Waiting for frame: " + nextFrame);
- //Waiting for a data packet
- packet = txrx.receive();
- //Packet received. Now, extract the frame
- frame = TxRx.getPacketFrame(packet);
- sendControl = true;
- if (debug)
- System.out.println("Received frame: " + frame.getSeq());
- if (frame.CRCOK() == true) {
- //Frame is OK.
- //Is the sequence correct?
- if (frame.getSeq() == nextFrame) {
- if (!debug)
- System.out.print(frame.getContent());
- else
- System.out.println("Received frame: " + nextFrame);
- nextFrame = (nextFrame+1)%(maxSeq+1); //next frame mod maxSeq
- control = new MyFrame(1, nextFrame, ""); //RR with next frame
- if (framesNotAnswered < (windowSize-1)){
- if (Math.random() < 0.5) {
- framesNotAnswered++;
- sendControl = false;
- }
- }
- }
- else { //the sequence is not correct
- if (debug)
- System.out.println("Sequence not in order");
- control = new MyFrame(1, nextFrame, ""); //RR
- }
- }
- else { //the frame has errors
- if (debug)
- System.out.println("BAD CRC!!!");
- control = new MyFrame(2, nextFrame, ""); //REJ
- }
- if (sendControl) {
- if (debug)
- System.out.println("Sending: " + control);
- txrx.send(control, packet.getPort()); //sending a control frame
- framesNotAnswered = 0;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement