Java сокет сервера с использованием writeBytes - PullRequest
0 голосов
/ 19 февраля 2020

Я пытаюсь реализовать простой сервер с использованием Java сокетов. Сервер должен вернуть сообщение HTTP Request, которое отправляет клиент. Таким образом, если я введу http://localhost: 8888 в свой браузер, я ожидаю увидеть сообщение HTTP-запроса, которое я отправил в виде простого текста на веб-странице. Кажется, что код выполняет то, что я ожидаю, поскольку браузер отображает сообщение http, которое совпадает с тем, что выводится в cmd при запуске программы.

Есть некоторые части моего кода Хотя мне интересно, например:

out.writeBytes("HTTP/1.0 200 OK\r\n"); out.writeBytes("\r\n");

перед моими данными. Достаточно ли этого, чтобы быть действительным ответом HTTP?

Есть ли в моем коде что-то еще, что, кажется, не имеет смысла или может быть улучшено?

Вот полная программа, которая выполняется в cmd командой "java HTTPEcho 8888 "например, и проверил, введя localhost: 8888 в вашем браузере, и все, что напечатано в cmd, должно быть таким же, как в браузере.

import java.net.*;
import java.io.*;

public class HTTPEcho {
    public static void main( String[] args) throws IOException {
        if (args.length != 1) {
                    System.err.println("Usage: java HTTPEcho <port number>");
                    System.exit(1);
        }
        int port = Integer.parseInt(args[0]);
        try (

            ServerSocket welcomeSocket = new ServerSocket(port);
            Socket connectionSocket = welcomeSocket.accept();
            DataOutputStream out = new DataOutputStream(connectionSocket.getOutputStream());
            BufferedReader in = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
        ){
            // echo back http request message as response to web browser client

            out.writeBytes("HTTP/1.0 200 OK\r\n");
            out.writeBytes("\r\n");

            String s;
            while ((s = in.readLine()) != null){
                System.out.println(s);
                out.writeBytes(s + "\r\n");
                if(s.isEmpty()){
                    break;
                }
            }

            out.close();
            in.close();
            connectionSocket.close();

        } catch (IOException e) {
            System.out.println("Exception caught when trying to listen on port "
                            + port + " or listening for a connection");
                        System.out.println(e.getMessage());
        }
    }
}

...