Question: Hi guys, Im trying to implement persistent connection in this code. It must have keep alive, timeout and content length header. The client must open
Hi guys, Im trying to implement persistent connection in this code. It must have keep alive, timeout and content length header. The client must open a test.html file with jpeg or jpg pictures inside the html file. For example localhost:4000/test.html. The test.html must be inside the werbserver2 folder.
Example of the html
image:
import java.io.* ; import java.net.* ; import java.util.* ; public final class webserver2 { public static void main(String argv[]) throws Exception { // Set the port number. int port = 9999; // Establish the listen socket. ServerSocket welcomeSocket = new ServerSocket(port); // Process HTTP service requests in an infinite loop. //while (true) {//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////dont use while loop for persistent connection // Listen for a TCP connection request. Socket connectionSocket = welcomeSocket.accept(); // Construct an object to process the HTTP request message. HttpRequest request = new HttpRequest( connectionSocket ); // Create a new thread to process the request. Thread thread = new Thread(request); // Start the thread. thread.start(); }
}
}/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// final class HttpRequest implements Runnable { final static String CRLF = " ";//returning carriage return (CR) and a line feed (LF) Socket socket; // Constructor public HttpRequest(Socket socket) throws Exception { this.socket = socket; } // Implement the run() method of the Runnable interface. //Within run(), we explicitly catch and handle exceptions with a try/catch block. public void run() { try {processRequest();}catch (Exception e) {System.out.println(e);} } private void processRequest() throws Exception { // Get a reference to the socket's input and output streams. InputStream instream = socket.getInputStream(); DataOutputStream os = new DataOutputStream(socket.getOutputStream()); // Set up input stream filters. // Page 169 10th line down or so... BufferedReader br = new BufferedReader(new InputStreamReader(instream));//reads the input data // Get the request line of the HTTP request message. String requestLine = br.readLine();// get /path/file.html version of http // Display the request line. System.out.println(); System.out.println(requestLine); // HERE WE NEED TO DEAL WITH THE REQUEST // Extract the filename from the request line. StringTokenizer tokens = new StringTokenizer(requestLine);// this is a input method with deliminators tokens.nextToken(); // skip over the method, which should be "GET" String fileName = tokens.nextToken(); // Prepend a "." so that file request is within the current directory. fileName = "." + fileName; //Open the requested file. FileInputStream fis = null; boolean fileExists = true; try { fis = new FileInputStream(fileName); } catch (FileNotFoundException e) { fileExists = false; } //Construct the response message. String statusLine = null; String contentTypeLine = null; String entityBody = null; if (fileExists) { statusLine = "HTTP/1.0 200 OK" + CRLF; //common success message contentTypeLine = "Content-type: " + contentType( fileName ) + CRLF;}//content info else { statusLine = "HTTP/1.0 404 Not Found" + CRLF;//common error message contentTypeLine = "Content-type: " + "text/html" + CRLF;//content info entityBody = "" + "
My First Heading
"); //os.writeBytes( "My first paragraph.
"); //os.flush(); // Close streams and socket. os.close(); br.close(); socket.close(); } //return the file types private static String contentType(String fileName) { if(fileName.endsWith(".htm") || fileName.endsWith(".html")) {return "text/html";} if(fileName.endsWith(".jpg") || fileName.endsWith(".jpeg")) {return "image/jpeg";} if(fileName.endsWith(".gif")) {return "image/gif";} return "application/octet-stream"; } //set up input output streams private static void sendBytes(FileInputStream fis, OutputStream os) throws Exception { // Construct a 1K buffer to hold bytes on their way to the socket. byte[] buffer = new byte[1024]; int bytes = 0; // Copy requested file into the socket's output stream. while((bytes = fis.read(buffer)) != -1 )// read() returns minus one, indicating that the end of the file { os.write(buffer, 0, bytes); }} }
Step by Step Solution
There are 3 Steps involved in it
Get step-by-step solutions from verified subject matter experts
