gpt4 book ai didi

java - 我的套接字客户端似乎只收到来自 HTTP 服务器的第一个响应。为什么?

转载 作者:行者123 更新时间:2023-11-29 08:08:29 25 4
gpt4 key购买 nike

我正在尝试开发一个允许我在线程上运行套接字的类,并且允许我随时通过它发送数据,并在数据到达时接收通知。它不应该假设任何事情,例如仅在它首先发送消息后才收到消息等。由于某种原因,以下代码仅打印第一个请求的响应:

public static void main(String[] args) throws IOException {
TCPClient client = new TCPClient(new TCPClientObserver());
client.connect("www.microsoft.com", 80);

sleep(1000);
client.send("HTTP GET");

sleep(5000);
client.send("XYZ");
}

打印

echo: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
echo: <HTML><HEAD><TITLE>Bad Request</TITLE>
echo: <META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD>
echo: <BODY><h2>Bad Request - Invalid URL</h2>
echo: <hr><p>HTTP Error 400. The request URL is invalid.</p>
echo: </BODY></HTML>

这里是socket的核心逻辑:

        echoSocket = new Socket("www.microsoft.com", 80);
out = new PrintWriter(echoSocket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(
echoSocket.getInputStream()));

while (true) {
String response = in.readLine();
if (response != null)
System.out.println("echo: " + response);
}

我想问题出在我的循环上?

我的应用程序的完整测试代码可以在这里看到: http://codepad.org/bmHwct35

谢谢

最佳答案

问题不在于循环,而在于您发送的第一个请求。 “HTTP GET”是无效请求,服务器应响应“400 Bad request”,然后关闭连接。这就是为什么您没有收到第二条消息的回复。尝试有效的 HTTP 请求,例如"GET/HTTP/1.1\r\nHost: www.microsoft.com\r\n\r\n"而不是。默认情况下,HTTP 1.1 连接保持 Activity 状态,因此您可以发送多个连接并接收后续响应。

关于java - 我的套接字客户端似乎只收到来自 HTTP 服务器的第一个响应。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9550842/

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