gpt4 book ai didi

java - 为什么从套接字流中读取永远阻塞?

转载 作者:塔克拉玛干 更新时间:2023-11-01 19:09:13 25 4
gpt4 key购买 nike

我正在尝试通过打开 TCP 套接字手动执行一些 HTTP,发送请求并读取/打印响应消息。响应主体的内容打印得很好,但主线程永远不会退出并永远阻塞。

socket = new Socket(host, port);
PrintWriter writer = new PrintWriter(socket.getOutputStream());
writer.print(request);
writer.flush();
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
reader.lines().forEach(System.out::println);
// String next_record = null;
// while ((next_record = reader.readLine()) != null)
// System.out.println(next_record);

socket.close();
// System.out.println("Finished");

我缺少什么,我该如何解决?

最佳答案

您确定发送的 HTTP 请求正确吗?这对我有用。请注意“Connection: Close\r\n”字符串很重要,否则在阅读内容后它也会挂起。

import java.net.Socket;
import java.io.PrintWriter;
import java.io.*;

public class App {

public static void main(String[] args) throws Exception {
String host = "google.com";
int port = 80;
Socket socket = new Socket(host, port);

//BufferedWriter writer = new BufferedWriter(
// new OutputStreamWriter(socket.getOutputStream(), "UTF-8"));
PrintWriter writer = new PrintWriter(socket.getOutputStream());
writer.write("GET / HTTP/1.1\r\n");
writer.write("Connection: Close\r\n");
writer.write("\r\n");
writer.flush();

BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));

// reader.lines().forEach(System.out.println);
String line;
System.out.println("Reading lines:");
while ((line = reader.readLine()) != null) {
System.out.println("* " + line);
}
System.out.println("DONE READING RESPONSE");

reader.close();
writer.close();
// socket.close();

System.out.println("Finished");
}

}

关于java - 为什么从套接字流中读取永远阻塞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22691665/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com