Advertisement
Guest User

Untitled

a guest
Sep 30th, 2014
243
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.04 KB | None | 0 0
  1. import java.io.*;
  2. import java.net.*;
  3.  
  4. class Client
  5. {
  6.   public static void main(String args[]) throws Exception
  7.   {
  8.     // messages to transmit
  9.     String[] message = {"message 1", "message 2", "message 3", "message 4",
  10.               "message 5", "message 6", "message 7", "message 8"};
  11.  
  12.     // open an UDP socket (for input/output)
  13.     DatagramSocket clientSocket = new DatagramSocket();
  14.     InetAddress IPAddress = InetAddress.getByName("localhost");
  15.     int messageInd = 0;             // init message index
  16.     int state = 0;              // FSM state
  17.  
  18.     while(true)                 // TX FSM
  19.     {
  20.       if (messageInd == message.length) break;  // loop over messages
  21.       switch (state)
  22.       {
  23.         // compose packet and transmit it
  24.         case 0:                 // compose packet and TX it
  25.           Packet p = new Packet(message[messageInd], 0); // create packet    
  26.       short distortion = (short) Math.ceil(Math.random()*2);
  27.           p.crc ^= distortion;
  28.       byte[] pkt = Packet.serialize(p);     // and serialize it
  29.           DatagramPacket sendPacket =           // add packet fields
  30.              new DatagramPacket(pkt, pkt.length, IPAddress, 9876);
  31.           clientSocket.send(sendPacket);        // send packet to server
  32.           state = 1;                            // transfer to state 1
  33.           break;
  34.  
  35.         // wait for ACK for packet #0
  36.         case 1:
  37.           byte[] receiveData = new byte[1000];  // buffer for ACK packet
  38.           DatagramPacket receivePacket =
  39.              new DatagramPacket(receiveData, receiveData.length);
  40.           clientSocket.receive(receivePacket);  // wait for ACK
  41.           p = Packet.deserialize(receivePacket.getData()); 
  42.       short ourCRC = Packet.computeCRC(p.payload); // real packet CRC
  43.       if ((ourCRC != p.crc) || p.pktNo != 0)
  44.       {
  45.         p = new Packet(message[messageInd], 0); // create packet
  46.             distortion = (short) Math.ceil(Math.random()*2);
  47.             p.crc ^= distortion;
  48.             pkt = Packet.serialize(p);          // and serialize it
  49.             sendPacket =                        // add packet fields
  50.                new DatagramPacket(pkt, pkt.length, IPAddress, 9876);
  51.             clientSocket.send(sendPacket);      // send packet to server
  52.           }
  53.           else
  54.           {
  55.             messageInd++;           // prepare to send next msg
  56.             state = 2;              // update state
  57.           }
  58.           break;
  59.  
  60.         case 2:
  61.           p = new Packet(message[messageInd], 1); // create packet
  62.           distortion = (short) Math.ceil(Math.random()*2);
  63.           p.crc ^= distortion;
  64.           pkt = Packet.serialize(p);            // and serialize it
  65.           sendPacket =                          // add packet fields
  66.              new DatagramPacket(pkt, pkt.length, IPAddress, 9876);
  67.           clientSocket.send(sendPacket);        // send packet to server
  68.           state = 3;                            // transfer to state 3
  69.           break;
  70.  
  71.         case 3:
  72.           receiveData = new byte[1000];         // buffer for ACK packet
  73.           receivePacket =
  74.              new DatagramPacket(receiveData, receiveData.length);
  75.           clientSocket.receive(receivePacket);  // wait for ACK
  76.           p = Packet.deserialize(receivePacket.getData());
  77.           ourCRC = Packet.computeCRC(p.payload); // real packet CRC
  78.           if ((ourCRC != p.crc) || p.pktNo != 1)
  79.           {
  80.             p = new Packet(message[messageInd], 1); // create packet
  81.             distortion = (short) Math.ceil(Math.random()*2);
  82.             p.crc ^= distortion;
  83.             pkt = Packet.serialize(p);          // and serialize it
  84.             sendPacket =                        // add packet fields
  85.                new DatagramPacket(pkt, pkt.length, IPAddress, 9876);
  86.             clientSocket.send(sendPacket);      // send packet to server
  87.           }
  88.           else
  89.           {
  90.             messageInd++;                       // prepare to send next msg
  91.             state = 0;                          // update state
  92.           }
  93.           break;
  94.       }
  95.     }
  96.  
  97.     clientSocket.close();
  98.   }
  99.  
  100. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement