繁体   English   中英

无法从套接字连接获得响应

[英]Can't get response from socket connection

我正在研究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服务器将坐在那里等待您终止请求,您的代码将等待永远不会到来的答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM