Lab2: Socket Programming Lecturer: Mauro Conti T.A.: Eyüp S. Canlar Exercise 1 Write a client and a multi-threaded server program Clients send a message to the server Usage: java Lab2Client <message> Server prints the message out Usage: java Lab2Server Exercise 1: client and server //Client code Socket socket = new Socket(“localhost”, 12345); //Send message …. //Server code ServerSocket servSocket = new ServerSocket(12345); while(true){ Socket cliSocket = servSocket.accept(); //Create a thread to handle //client print request } Exercise 2 Write a program HttpGet.java Usage: java HttpGet <host> <path> Requirements: int start(String[] argv) void sendGetRequest(String filename, BufferedWriter out) throws IOException Initialize Socket, BufferedReader, and BufferedWriter Send GET request: “GET /path/index.html HTML/1.0\r\n\r\n” void receiveGetResponse(BufferedReader in) throws IOException Reads the response and prints it line by line on standard output Exercise 2: start(String[] argv) public void start(String[] argv){ try{ Socket socket = new Socket(argv[0]); BufferedReader in = new BufferedReader(new InputStreamReader( socket.getInputStream())); BufferedWriter out = new BufferedWriter(new OutputStreamWriter( socket.getOutputStream()); …. } catch(Exception e){….} } Exercise 2: send and receive Sending GET request out.write(getRequest); out.flush(); Receiving reply from web server while (line = in.readln() != null){….} Exercise 3 Modify the program of Exercise 1 to store the received file. To achieve this: Write a method to parse the path to distil the filename Send GET request and receive reply Skip the header of the reply and store the remainder in the local file Exercise 3: parsing the path StringTokenizer strtok = new StringTokenizer(path, “/”); //skip all the tokens until the last one …. filename = strtok.nextToken(); Exercise 3: parsing reply while(/*some condition*/){ line = in.readLine(); if(line=“” && !firstEmptyLine){ //We reached the end of the header } if(firstEmptyLine){ //Start reading payload } }