Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我的Socket.accept()接受两个或三个请求?_Java_Sockets_Serversocket_Httpserver - Fatal编程技术网

Java 为什么我的Socket.accept()接受两个或三个请求?

Java 为什么我的Socket.accept()接受两个或三个请求?,java,sockets,serversocket,httpserver,Java,Sockets,Serversocket,Httpserver,主要类别: Main { public static void main(String[] args) { final HTTPServer server = new HTTPServer(9999); server.start(); System.out.println("Server started!"); Runtime.getRuntime().addShutdownHook(new Thre

主要类别:

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();
    }
}
打印一个客户端请求后的上述代码:

服务器启动了

一,==========================

二,==========================

替换
socket.getOutputStream().write((“\”HTTP/1.1 200 OK\\r\\n\”连接:关闭\r\n\r\n”).getBytes()时socket.getOutputStream()进行代码>写入(“abrakadabra.getBytes()),程序打印:

服务器启动了

一,==========================

二,==========================

三,==========================


请显示您的客户代码。客户端似乎只是在收到特定字符串后停止打开套接字(在您的情况下,
\“HTTP/1.1 200 OK\\r\\n\”连接:close\r\n\r\n
)我从浏览器发送请求您具体做什么?在浏览器的地址栏中打印IP:port并按Enter键一次?可能您的浏览器正在发送其他请求,如favicons等?@mangusta yes,localhost:9999,然后按Enter键一次