Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.*;
- import java.net.*;
- class Client
- {
- public static void main(String args[]) throws Exception
- {
- // messages to transmit
- String[] message = {"message 1", "message 2", "message 3", "message 4",
- "message 5", "message 6", "message 7", "message 8"};
- // open an UDP socket (for input/output)
- DatagramSocket clientSocket = new DatagramSocket();
- InetAddress IPAddress = InetAddress.getByName("localhost");
- int messageInd = 0; // init message index
- int state = 0; // FSM state
- while(true) // TX FSM
- {
- if (messageInd == message.length) break; // loop over messages
- switch (state)
- {
- // compose packet and transmit it
- case 0: // compose packet and TX it
- Packet p = new Packet(message[messageInd], 0); // create packet
- short distortion = (short) Math.ceil(Math.random()*2);
- p.crc ^= distortion;
- byte[] pkt = Packet.serialize(p); // and serialize it
- DatagramPacket sendPacket = // add packet fields
- new DatagramPacket(pkt, pkt.length, IPAddress, 9876);
- clientSocket.send(sendPacket); // send packet to server
- state = 1; // transfer to state 1
- break;
- // wait for ACK for packet #0
- case 1:
- byte[] receiveData = new byte[1000]; // buffer for ACK packet
- DatagramPacket receivePacket =
- new DatagramPacket(receiveData, receiveData.length);
- clientSocket.receive(receivePacket); // wait for ACK
- p = Packet.deserialize(receivePacket.getData());
- short ourCRC = Packet.computeCRC(p.payload); // real packet CRC
- if ((ourCRC != p.crc) || p.pktNo != 0)
- {
- p = new Packet(message[messageInd], 0); // create packet
- distortion = (short) Math.ceil(Math.random()*2);
- p.crc ^= distortion;
- pkt = Packet.serialize(p); // and serialize it
- sendPacket = // add packet fields
- new DatagramPacket(pkt, pkt.length, IPAddress, 9876);
- clientSocket.send(sendPacket); // send packet to server
- }
- else
- {
- messageInd++; // prepare to send next msg
- state = 2; // update state
- }
- break;
- case 2:
- p = new Packet(message[messageInd], 1); // create packet
- distortion = (short) Math.ceil(Math.random()*2);
- p.crc ^= distortion;
- pkt = Packet.serialize(p); // and serialize it
- sendPacket = // add packet fields
- new DatagramPacket(pkt, pkt.length, IPAddress, 9876);
- clientSocket.send(sendPacket); // send packet to server
- state = 3; // transfer to state 3
- break;
- case 3:
- receiveData = new byte[1000]; // buffer for ACK packet
- receivePacket =
- new DatagramPacket(receiveData, receiveData.length);
- clientSocket.receive(receivePacket); // wait for ACK
- p = Packet.deserialize(receivePacket.getData());
- ourCRC = Packet.computeCRC(p.payload); // real packet CRC
- if ((ourCRC != p.crc) || p.pktNo != 1)
- {
- p = new Packet(message[messageInd], 1); // create packet
- distortion = (short) Math.ceil(Math.random()*2);
- p.crc ^= distortion;
- pkt = Packet.serialize(p); // and serialize it
- sendPacket = // add packet fields
- new DatagramPacket(pkt, pkt.length, IPAddress, 9876);
- clientSocket.send(sendPacket); // send packet to server
- }
- else
- {
- messageInd++; // prepare to send next msg
- state = 0; // update state
- }
- break;
- }
- }
- clientSocket.close();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement