Advertisement
Guest User

Untitled

a guest
Oct 15th, 2019
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.06 KB | None | 0 0
  1. package arq;
  2.  
  3.  
  4. import java.net.DatagramPacket;
  5.  
  6. import comm.MyFrame;
  7. import comm.TxRx;
  8.  
  9. public class receiver {
  10.  
  11. public static void main(String[] args) {
  12.  
  13. if (args.length != 4) {
  14. System.out.println("Usage: receiver windowSize maxSeq localPort debug");
  15. System.exit(-1);
  16. }
  17. DatagramPacket packet;
  18. int nextFrame = 0;
  19. int maxSeq = Integer.parseInt(args[1]);
  20. int windowSize = Integer.parseInt(args[0]);
  21. int framesNotAnswered = 0;
  22. boolean sendControl;
  23. MyFrame frame;
  24. MyFrame control;
  25. TxRx txrx = new TxRx(Integer.parseInt(args[2]));
  26. boolean debug;
  27. if (Integer.parseInt(args[3]) == 0)
  28. debug = false;
  29. else
  30. debug = true;
  31.  
  32. while (true){
  33. if (debug)
  34. System.out.println("Waiting for frame: " + nextFrame);
  35. //Waiting for a data packet
  36. packet = txrx.receive();
  37. //Packet received. Now, extract the frame
  38. frame = TxRx.getPacketFrame(packet);
  39. sendControl = true;
  40. if (debug)
  41. System.out.println("Received frame: " + frame.getSeq());
  42. if (frame.CRCOK() == true) {
  43. //Frame is OK.
  44. //Is the sequence correct?
  45. if (frame.getSeq() == nextFrame) {
  46. if (!debug)
  47. System.out.print(frame.getContent());
  48. else
  49. System.out.println("Received frame: " + nextFrame);
  50. nextFrame = (nextFrame+1)%(maxSeq+1); //next frame mod maxSeq
  51. control = new MyFrame(1, nextFrame, ""); //RR with next frame
  52. if (framesNotAnswered < (windowSize-1)){
  53. if (Math.random() < 0.5) {
  54. framesNotAnswered++;
  55. sendControl = false;
  56. }
  57. }
  58. }
  59. else { //the sequence is not correct
  60. if (debug)
  61. System.out.println("Sequence not in order");
  62. control = new MyFrame(1, nextFrame, ""); //RR
  63. }
  64. }
  65. else { //the frame has errors
  66. if (debug)
  67. System.out.println("BAD CRC!!!");
  68. control = new MyFrame(2, nextFrame, ""); //REJ
  69. }
  70. if (sendControl) {
  71. if (debug)
  72. System.out.println("Sending: " + control);
  73. txrx.send(control, packet.getPort()); //sending a control frame
  74. framesNotAnswered = 0;
  75. }
  76. }
  77. }
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement