Java 向HttpURLConnection.getInputStream()发送响应并避免“错误”的格式是什么;无效的Http响应";?

Java 向HttpURLConnection.getInputStream()发送响应并避免“错误”的格式是什么;无效的Http响应";?,java,http,Java,Http,我的服务器通过以下方式向HTTPUrlConnection发送响应: ServerSocket servSok = new ServerSocket(portNmb); Socket sok = servSok.accept(); processTheIncomingData(sok.getInputStream()); Writer wrtr = new OutputStreamWriter(sok.getOutputStream()); wrtr.write("<html><

我的服务器通过以下方式向
HTTPUrlConnection
发送响应:

ServerSocket servSok = new ServerSocket(portNmb);
Socket sok = servSok.accept();
processTheIncomingData(sok.getInputStream());
Writer wrtr = new OutputStreamWriter(sok.getOutputStream());
wrtr.write("<html><body>123 Hello World</body></html>"); // <------- format?
wrtr.flush();
ServerSocket servSok=newserversocket(portNmb);
Socket-sok=servSok.accept();
处理输入数据(sok.getInputStream());
Writer wrtr=newoutputstreamwriter(sok.getOutputStream());

写下(“123你好世界”);// 我同意@JBNizet。HTTP是一个非常复杂的协议。你应该使用服务器

但是如果你是为一个玩具项目写这篇文章,这里有一些代码可以让你开始。 请勿在生产过程中使用此选项:)

String content=“123 Hello World”;
Writer wrtr=newoutputstreamwriter(sok.getOutputStream());
wrtr.write(“HTTP/1.1200ok\n”);
wrtr.write(“内容类型:text/html;charset=UTF-8\n”);
//假设内容是纯ascii
wrtr.write(“内容长度:“+Content.Length()+”\n”);
wrtr.write(“连接:关闭\n\n”);
写作(内容);
wrtr.flush();
//然后关闭连接,不要重复使用连接
//因为您可能没有使用完整的请求内容

如果您想从头开始开发HTTP服务器,必须准备阅读HTTP规范。你为什么要这么做?为什么不使用众多可用的HTTP服务器之一,喜悦的泪水。我很高兴。谢谢,答案不对。1.您必须使用整个请求内容:如果不这样做,连接将在您关闭时重置,飞行中的任何挂起数据都将丢失。2.HTTP中的行终止符定义为
\r\n
,而不是
\n
。3.您不能假设
字符串中的字符数
等于
编写器将放入流中的字节数,因此此处的
内容长度
头不一定正确设置。
HttpURLConnection conn = (HttpUTLConnection) url.openConnection();    
conn.setRequestMethod("GET");
conn.setDoOutput(true);
conn.setDoInput(true);
sendSomeData(conn.getOutputStream());
String mssg = conn.getResponseMessage(); // <----- Invalid Http Response
    String content = "<html><body>123 Hello World</body></html>";
    Writer wrtr = new OutputStreamWriter(sok.getOutputStream());
    wrtr.write("HTTP/1.1 200 OK\n");
    wrtr.write("Content-Type: text/html; charset=UTF-8\n");
    //assuming content is pure ascii
    wrtr.write("Content-Length: " + content.length() + "\n");
    wrtr.write("Connection: close\n\n");
    wrtr.write(content);
    wrtr.flush();
    //then close the connection, do not reuse the connection
    //as you might not have consumed the full request content