Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';无法从套接字连接获取响应_Java_Sockets_Tcp - Fatal编程技术网

Java Can';无法从套接字连接获取响应

Java Can';无法从套接字连接获取响应,java,sockets,tcp,Java,Sockets,Tcp,我正在学习java中的套接字。我创建了一个简单的tcp客户端,旨在发送HTTP请求并接收响应。但是在运行客户端之后,它只是等待,没有响应。这是我的密码: public static void connect(){ try ( Socket socket = new Socket("localhost", 80); PrintWriter writer = new PrintWriter(new OutputStreamWriter

我正在学习java中的套接字。我创建了一个简单的tcp客户端,旨在发送HTTP请求并接收响应。但是在运行客户端之后,它只是等待,没有响应。这是我的密码:

public static void connect(){
    try (
        Socket socket = new Socket("localhost", 80);
        PrintWriter writer 
            = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
        BufferedReader reader 
            = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    ) {
        socket.setSoTimeout(60000);
        String request = "GET / HTTP/1.1\r\n" +
            "Host: localhost\r\n" +
            "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n" +
            "Accept-Language: en-US,en;q=0.5\r\n";
        writer.write(request);
        writer.flush();
        String line;
        System.out.println("Response: ");
        while((line = reader.readLine()) != null) {
            System.out.println(line);
        }
    } catch (IOException e) {
        System.err.println(e.getMessage());
    }
} 
以下是输出:

Response: 
Read timed out
BUILD SUCCESSFUL (total time: 1 minute 0 seconds)
注:
我知道我可以在java中使用更多的抽象类,比如
url
类,等等。正如我所说,我正在研究套接字。

要终止HTTP请求的请求部分,您需要发送两条新行,而不仅仅是一条

String request = "GET / HTTP/1.1\r\n" +
    "Host: localhost\r\n" +
    "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n" +
    "Accept-Language: en-US,en;q=0.5\r\n\r\n";
请注意字符串末尾的双精度
\r\n\r\n


如果您不终止请求,另一端的HTTP服务器将坐在那里等待您终止请求,而您的代码将等待永远不会出现的答案。

感谢@Erwin的回复,但我也尝试了回车换行序列,没有任何更改。我想我发送请求和读取响应的方式可能有问题。问题正是@Erwin所说的。你真的试过在请求头的末尾写一个空行吗?谢谢@EJP和Erwin,我忘了