You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java ServerSocket监听9090端口时浏览器访问127.0.0.1被拒问题

问题原因

  1. 不符合HTTP协议规范
    浏览器发送的是标准HTTP请求,要求返回的内容必须符合HTTP响应格式。你当前代码直接返回Hello client!,没有携带任何合法HTTP响应头,浏览器无法识别返回内容,会判定为连接异常。
  2. 服务端单次请求后直接关闭监听
    你的代码处理完一次客户端请求后,直接调用了serverSocket.close()关闭了服务端监听套接字,浏览器发起第二次请求(比如请求站点图标favicon.ico)时无法建立连接,就会抛出拒绝连接错误。
  3. 请求读取不完整
    你只读取了HTTP请求的第一行内容,没有完整读取整个请求的所有报文头,也可能触发连接提前中断的问题。

修复方案

调整后的代码如下:

try {
    ServerSocket serverSocket = new ServerSocket(9090);
    System.out.println("waiting for clients...");
    // 加循环保持服务端监听,不要处理一次就关闭
    while (true) {
        Socket socket = serverSocket.accept();
        PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
        BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        
        // 读取完整的HTTP请求头
        String line;
        while ((line = input.readLine()) != null && !line.isEmpty()) {
            System.out.println(line);
        }
        
        // 先返回标准HTTP响应头
        out.println("HTTP/1.1 200 OK");
        out.println("Content-Type: text/html; charset=UTF-8");
        // 响应头和响应体之间必须有一个空行
        out.println();
        // 再返回实际内容
        out.println("Hello client!");
        
        input.close();
        out.close();
        socket.close();
        // 不要关闭serverSocket,保持监听
    }
} catch (Exception e) {
    System.out.println(e);
}

验证步骤

运行修改后的代码后,再次在浏览器访问127.0.0.1:9090即可正常看到返回的Hello client!内容,控制台也会打印完整的浏览器请求报文。

内容的提问来源于stack exchange,提问作者Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 20:45:03