I am currently creating a small HTTP server that returns a static page <p>Hello!</p>
... I tried with sockets with Java:
public static void main(String[] args) throws Exception { // création de la socket int port = 1989; ServerSocket serverSocket = new ServerSocket(port); System.err.println("Serveur lancé sur le port : " + port); // repeatedly wait for connections, and process while (true) { // on reste bloqué sur l'attente d'une demande client Socket clientSocket = serverSocket.accept(); System.err.println("Nouveau client connecté"); // on ouvre un flux de converation BufferedReader in = new BufferedReader( new InputStreamReader(clientSocket.getInputStream()) ); PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(clientSocket.getOutputStream())), true); // chaque fois qu'une donnée est lue sur le réseau on la renvoi sur le flux d'écriture. // la donnée lue est donc retournée exactement au même client. String s; while ((s = in.readLine()) != null) { System.out.println(s); out.write("HTTP/1.0 200 OK\r\n"); out.write("Date: Fri, 31 Dec 1999 23:59:59 GMT\r\n"); out.write("Server: Apache/0.8.4\r\n"); out.write("Content-Type: text/html\r\n"); out.write("Content-Length: 59\r\n"); out.write("Expires: Sat, 01 Jan 2000 00:59:59 GMT\r\n"); out.write("Last-modified: Fri, 09 Aug 1996 14:21:40 GMT\r\n"); out.write("\r\n"); out.write("<TITLE>Exemple</TITLE>"); out.write("<P>Ceci est une page d'exemple.</P>"); } // on ferme les flux. System.err.println("Connexion avec le client terminée"); out.close(); in.close(); clientSocket.close(); } }
this code does not contain any errors and I got a response from the browser like this:
GET / HTTP/1.1 Host: localhost:1989 Connection: keep-alive User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.46 Safari/536.5 Comodo_Dragon/19.0.3.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Encoding: gzip,deflate,sdch Accept-Language: fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4 Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
But my problem is that I get no page at the Browser? Any help please?
PS: I already read this article: http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol , (im sorry for the french language...)
An HTTP server is a listening socket that rapidly accepts incoming requests and opens new sockets to handle those requests. The connection socket returns an HTTP response, and closes the connection.
ServerSocket Class is used for providing system-independent implementation of the server-side of a client/server Socket Connection. The constructor for ServerSocket throws an exception if it can't listen on the specified port (for example, the port is already being used). It is widely used so the applications of java.
In addition to the \r\n
after every request header line, you have to send an empty line after the header. Example:
out.write("HTTP/1.0 200 OK\r\n"); // Header... out.write("Last-modified: Fri, 09 Aug 1996 14:21:40 GMT\r\n"); out.write("\r\n"); // The content starts afters this empty line out.write("<TITLE>Hello!</TITLE>"); // Content...
I corrected your code so that it works (but it is still not perfect, you should handle every request in a seperate thread, e.g. with java.util.concurrent.ThreadPoolExecutor
):
public static void main(String[] args) throws Exception { // création de la socket int port = 1989; ServerSocket serverSocket = new ServerSocket(port); System.err.println("Serveur lancé sur le port : " + port); // repeatedly wait for connections, and process while (true) { // on reste bloqué sur l'attente d'une demande client Socket clientSocket = serverSocket.accept(); System.err.println("Nouveau client connecté"); // on ouvre un flux de converation BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); BufferedWriter out = new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream())); // chaque fois qu'une donnée est lue sur le réseau on la renvoi sur // le flux d'écriture. // la donnée lue est donc retournée exactement au même client. String s; while ((s = in.readLine()) != null) { System.out.println(s); if (s.isEmpty()) { break; } } out.write("HTTP/1.0 200 OK\r\n"); out.write("Date: Fri, 31 Dec 1999 23:59:59 GMT\r\n"); out.write("Server: Apache/0.8.4\r\n"); out.write("Content-Type: text/html\r\n"); out.write("Content-Length: 59\r\n"); out.write("Expires: Sat, 01 Jan 2000 00:59:59 GMT\r\n"); out.write("Last-modified: Fri, 09 Aug 1996 14:21:40 GMT\r\n"); out.write("\r\n"); out.write("<TITLE>Exemple</TITLE>"); out.write("<P>Ceci est une page d'exemple.</P>"); // on ferme les flux. System.err.println("Connexion avec le client terminée"); out.close(); in.close(); clientSocket.close(); } }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With