使用缓冲的读取器块从套接字读取

时间:2016-01-07 21:12:19

标签: java sockets http post

我正在尝试在java中创建一个http服务器。

以下是我的代码片段。

ServerSocket s = new ServerSocket(80);
        while(true){
            Socket client = s.accept();
            BufferedReader in = new BufferedReader(
                    new InputStreamReader(client.getInputStream()));

            String input = in.readLine(), ff;
            System.out.println(input);
            while((ff = in.readLine()) != null){
                System.out.println(ff);
            }
            System.out.println("asd");
            in.close();
            client.close();
        }

Asd从未打印过。当我尝试在本地主机上执行POST时,它会向我发送所有标头,但不会发送任何内容数据。它等在那里什么都不做。

我正在使用Jquery

做一个帖子
$.post("http://127.0.0.1/",
        {
          name: "Donald Duck",
          city: "Duckburg"
        },
        function(data,status){
            alert("Data: " + data + "\nStatus: " + status);
        });

这是在屏幕上打印的内容:

POST / HTTP/1.1
Host: 127.0.0.1
Connection: keep-alive
Content-Length: 5
Accept: */*
Origin: http://www.w3schools.com
User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/47.0.2526.73 Chrome/47.0.2526.73 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8

那就是它,在此之后什么都没有。它在这一点上无限期地等待。

1 个答案:

答案 0 :(得分:0)

我的猜测 将是您的实际内容/有效负载未被BufferedReader#readLine()中所述的预期行分隔符终止。

这会阻止您的in.readLine()调用。

我会尝试使用read()方法,看看是否有帮助。如在

while((value = in.read()) != -1) {
    char c = (char)value;
    System.out.println(c);
}

编辑:事实上,您的问题很可能会重复此问题:Buffered Reader HTTP POST