gpt4 book ai didi

java - 如何阅读服务器回复而不被它阻止?

转载 作者:行者123 更新时间:2023-11-30 05:04:02 25 4
gpt4 key购买 nike

我正在编写一个代理并具有以下代码:

Socket conUser;
Socket conDest;
try{
ServerSocket ss = new ServerSocket(Integer.parseInt(p.getProperty("proxy.port")));
while(true){
//Connect to user
conUser = ss.accept();
BufferedReader inputFromUser = new BufferedReader(new InputStreamReader(conUser.getInputStream()));
BufferedWriter outputToUser = new BufferedWriter(new OutputStreamWriter(conUser.getOutputStream(), "UTF8"));

//Get user request
StringBuffer req = new StringBuffer();
getUserRequest(inputFromUser, req);
System.out.println("User requested the following:");
System.out.println(req);

//Connect to server
InetAddress a = InetAddress.getByName(determineHost(req));
conDest = new Socket(a,80);

//Send request to server
BufferedWriter outputToServer = new BufferedWriter(new OutputStreamWriter(conDest.getOutputStream(), "UTF8"));
InputStreamReader inputFromServer = new InputStreamReader(conDest.getInputStream(), "UTF8");
outputToServer.write(req.toString());
outputToServer.flush();

System.out.println("==============================");
System.out.println("Server replied with the following:");
//Read reply from the server
//=========================================
int chars;
while ((chars = inputFromServer.read()) != -1) {
System.out.print((char)chars);
outputToUser.write(chars);
outputToUser.flush();
//serverReply.append(chars);
}
//Relay reply to user
//outputToUser.write(serverReply.toString());
//System.out.println(serverReply);
//outputToUser.flush();
conUser.close();
conDest.close();
}
}
catch (Exception e) {
System.err.println(e);
}

发生的情况是:我建立了连接并且成功了。我也发送了请求,也成功了。我也得到了回复,并且能够加载整个页面的 HTML,但当读取到达内容末尾时,读取似乎并未终止。

具体来说,我正在尝试加载 Google 的主页,并且分块传输达到 0(即更改传输结束),因此应该没有更多输入可供读取,但这并没有导致循环停止阅读。对我来说还奇怪的是,几乎所有代理的代码示例都使用这个循环,并且假设它们有效,我看不出它们的代码和我的代码之间有太大差异。

如何使循环正确终止?

编辑:郑重声明,是的 - 我知道 TCP 连接应保持打开状态以处理进一步的连接。这与我遇到的问题无关。我需要让这个循环终止每个响应。

最佳答案

一般来说,连接在每次响应结束时不会关闭。创建 TCP 连接相对耗时,因此连接保持打开状态,以便您发送下一个请求。

这里有几个解释性链接:

关于java - 如何阅读服务器回复而不被它阻止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5714642/

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