A Simple Http Server with Java/Socket?

后端 未结 5 1219
耶瑟儿~
耶瑟儿~ 2020-11-29 03:11

I am currently creating a small HTTP server that returns a static page

Hello!

... I tried with sockets with Java:

  public sta         


        
5条回答
  •  失恋的感觉
    2020-11-29 03:28

    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("Hello!");
    // 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("Exemple");
            out.write("

    Ceci est une page d'exemple.

    "); // on ferme les flux. System.err.println("Connexion avec le client terminée"); out.close(); in.close(); clientSocket.close(); } }

提交回复
热议问题