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

Postman无法接收Java Socket返回的HTTP响应求助

解决Java Socket返回HTTP响应Postman无法接收的问题

我看了你的代码,问题出在HTTP响应的格式不符合规范上,Postman作为标准的HTTP客户端,只会识别符合HTTP协议要求的响应内容,你的代码里有几个关键错误导致Postman收不到有效响应:

主要问题点

  • 错误覆盖了HTTP响应头:你在构建响应时,最后一行response = "Hi Hope you are doing good";直接把之前写的状态行(HTTP/1.1 200 OK)、Date、Server这些必要的HTTP头全部覆盖了,导致发送的内容只是一段普通文本,没有HTTP响应的标识,Postman无法识别这是一个合法的HTTP响应。
  • 缺少响应头与响应体的分隔空行:HTTP协议要求响应头结束后必须有一个空行(\r\n\r\n)来分隔头和响应体,你的代码里没有这个分隔,客户端无法区分哪里是头、哪里是内容。
  • 缺少Content-Length头:这个头用于告诉客户端响应体的字节长度,没有它的话,Postman可能不知道什么时候停止等待数据,会一直处于加载状态。

修正后的代码

下面是调整后的完整代码,我标注了关键修改点:

import java.io.BufferedInputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class MainClass {
    public static void main(String args[]) {
        ServerSocket scket;
        Socket clientSocket;
        byte inFromInde[] = new byte[1000];
        int read_size_inde = 0;
        try{
            scket = new ServerSocket(7502);
            scket.setReuseAddress(true);
            clientSocket = scket.accept();
            System.out.println("Connection accepted");
            
            // 读取请求数据,指定有效读取长度避免多余空字符
            BufferedInputStream inputFromInde = new BufferedInputStream(clientSocket.getInputStream());
            read_size_inde = inputFromInde.read(inFromInde,0,1000);
            String str = new String(inFromInde, 0, read_size_inde);
            System.out.println(str);
            
            OutputStream output = clientSocket.getOutputStream();
            
            // 正确构建HTTP响应:状态行 → 响应头 → 空行 → 响应体
            String body = "Hi Hope you are doing good";
            String response = "HTTP/1.1 200 OK\r\n";
            response += "Date: Fri, 04 May 2001 20:08:11 GMT\r\n";
            response += "Server: Sanjits Server\r\n";
            response += "Connection: close\r\n";
            // 添加Content-Length,告诉客户端响应体的字节数
            response += "Content-Length: " + body.getBytes().length + "\r\n";
            // 空行分隔响应头和响应体,HTTP协议强制要求
            response += "\r\n";
            // 追加响应体内容
            response += body;
            
            byte[] bytes = response.getBytes();
            output.write(bytes);
            output.flush();
            
            // 按正确顺序关闭资源:先关输出流,再关客户端socket,最后关服务端socket
            output.close();
            clientSocket.close();
            scket.close();
            
        } catch(Exception e){
            // 打印完整异常栈,方便定位错误
            e.printStackTrace();
        }
    }
}

额外优化点

  • 读取请求数据时,指定有效读取长度new String(inFromInde, 0, read_size_inde),避免把数组中未读取的空字符转成字符串,导致控制台输出多余乱码。
  • 异常处理改为打印完整栈信息,能更清晰地看到错误原因,方便调试。

修改后再用Postman测试,应该就能正常收到响应了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 08:58:10