[英]Why reading from a socket stream blocks forever?
我正在嘗試通過打開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");
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.