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键一次