import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.InputStreamReader; import java.net.Socket; import java.util.Random; import java.util.StringTokenizer; /* * Created on Oct 5, 2004 * * This implements the thread that will handle each request */ /** * @author Thinh Nguyen * */ final class RdtRequest implements Runnable{ final static String CRLF = "\r\n"; Socket socket; // Constructor public RdtRequest (Socket socket) throws Exception{ this.socket = socket; } /* (non-Javadoc) * @see java.lang.Runnable#run() */ public void run() { try { processRequest(); } catch (Exception e) { System.out.println(e); } } private void processRequest() throws Exception { int expectedSeq = 0; // Get a reference to the socket's output stream. DataOutputStream os = new DataOutputStream(socket.getOutputStream()); // Set up input stream filters. BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); while (true) { if (expectedSeq == 10) { break; } // Get a packet. String packet = br.readLine(); // Extract the method, filename and version from the request line. StringTokenizer tokens = new StringTokenizer(packet); String sequence = tokens.nextToken(); // Debug info for private use System.out.println(); System.out.println("packet received:" + sequence); int seqnum = Integer.valueOf(sequence).intValue(); Random x = new Random(); int number = x.nextInt(1000); System.out.println("Random Number = " + number); if (seqnum == expectedSeq) { if (number > 570) { os.writeBytes("1\n"); System.out.println("send ACK"); expectedSeq = expectedSeq + 1; } else { if (number > 240) { os.writeBytes("0\n"); System.out.println("send NACK"); } else { System.out.println("time out"); } } } } // Close streams and socket. os.close(); br.close(); socket.close(); } }