vista_rui 2010-05-18 10:52
浏览 2763
已采纳

http请求头中回车换行符的问题

这段代码段创建了一个套接字,可以和本地HTTP服务器(127.0.0.1是指本地主机)进行通讯,发送一个HTTP请求,并从服务器接受响应,最后通过一个StringBuffer对象来保存响应并在控制台上打印出来。

http请求头和主体内容是通过CRLF分隔开来的(println()打印),对于HTTP请求格式来说,头部和主体内容之间有一个回车换行符(CRLF)是相当重要的。CRLF告诉HTTP服务器主体内容是在什么地方开始的。在一些互联网编程书籍中,CRLF还被认为是HTTP请求的第四部分。

现在的问题是这样的:用println()输出CRLF的话,请求能够正常响应。但是如果用out.print('\r');out.print('\n');就不行了,println()输出的到底是什么?求解答。

[code="java"]import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;

public class TestSocket {
public static void main(String[] args) throws Exception{
Socket socket = new Socket("127.0.0.1", 8080);
OutputStream os = socket.getOutputStream();
boolean autoflush = true;
PrintWriter out = new PrintWriter(os, autoflush);
BufferedReader in = new BufferedReader(
new InputStreamReader( socket.getInputStream() ));

    // send an HTTP request to the web server
    out.println("GET /index.jsp HTTP/1.1");
    out.println("Host: localhost:8080");
    out.println("Connection: Close");
    // CRLF 
    out.println();

    // read the response
    boolean loop = true;
    StringBuffer sb = new StringBuffer(8096);
    while (loop) {
        if ( in.ready() ) {
            int i=0;
            while (i!=-1) {
                i = in.read();
                sb.append((char) i);
            }
        loop = false;
        }
        Thread.currentThread().sleep(50);
    }

    // display the response to the out console
    System.out.println(sb.toString());
    socket.close();
}

}[/code]

  • 写回答

2条回答 默认 最新

  • weixin_42518082 2010-05-18 12:22
    关注

    println打印的是和System.getProperty("line.separator")相同的值, 不同系统的值不一样.
    println另外做的一件事就是调用了flush(),如果autoflush 为true的话.

    所以如果你用
    out.print('\r');
    out.print('\n');
    [b]还要加上一句
    out.flush();
    刷新缓冲[/b]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题