Почему мой Socket.accept () принимает два или три запроса? - PullRequest
0 голосов
/ 30 августа 2018

Основной класс:

Main {
    public static void main(String[] args) {
        final HTTPServer server = new HTTPServer(9999);
        server.start();

        System.out.println("Server started!");

        Runtime.getRuntime().addShutdownHook(new Thread(() -> {
            server.stop();
            System.out.println("Server stopped!");
        }));
    }
}

HTTPServer {

    // for debug
    private static int threadNumber;
    private final int port;
    private Thread listenThread;

    public HTTPServer(int port) {
        this.port = port;
    }

    void start() {
        listenThread = new Thread() {
            @Override
            public void run() {
                try (ServerSocket serverSocket = new ServerSocket(port)) {

                    while (!interrupted()) {
                        Socket socket = serverSocket.accept();
                        threadNumber++;

                        System.out.println(threadNumber+"==========================");
                        socket.getOutputStream().write(("\"HTTP/1.1 200 OK\\r\\n\"Connection: close\r\n\r\n").getBytes());
    //                  socket.getOutputStream().write("abrakadabra".getBytes());

                        socket.close();

                        Thread.sleep(1000);
                    }
                } catch (IOException | InterruptedException e) {
                    e.printStackTrace();
                }
            }
        };

        listenThread.start();
    }

    void stop() {
        listenThread.interrupt();
    }
}

Приведенный выше код после одного запроса клиента печатает:

Сервер запущен!

1 ==========================

2 ==========================

Когда я заменяю socket.getOutputStream().write(("\"HTTP/1.1 200 OK\\r\\n\"Connection: close\r\n\r\n").getBytes()); на socket.getOutputStream().write("abrakadabra".getBytes());, программа печатает:

Сервер запущен!

1 * ========================== * одна тысяча двадцать-одна

2 ==========================

3 ==========================

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...