gpt4 book ai didi

java - 带 PrintWriter 的简单 Java 服务器 - 向浏览器发送响应时出现问题

转载 作者:行者123 更新时间:2023-12-02 08:28:30 25 4
gpt4 key购买 nike

我刚刚开始研究 HTTP 等,并编写了一个简单的 Java 客户端,它使用 URLConnection 将 URL 发送到服务器并拉取 index.html 页面(作为纯文本)。

现在我正在开发一个简单的服务器,但我陷入了第一个障碍(也许是第二个或第三个),我无法让它正确响应客户端。

这是循环中的读取,它可以很好地读取 HTTP 请求,甚至可以从 FF 和 IE 等读取:

while((message = in.readLine()) != null)
{
System.out.println(message);
out.write("something");
}

问题是我不知道如何让它响应任何有用的信息。如果我让它执行上面代码中所做的事情,它会向我的客户端发送“某些内容”6 次(因为 HTTP 请求有 6 行),但不会向 FF/IE 等发送任何内容。

此外,当我添加一个 System.out.println("test"); 行在循环后打印时,它似乎并没有打破循环,但服务器似乎永远不会到达那一点,应该吗? readLine() 应该在第一个 HTTP 请求结束时返回 null 吗?

我一直在阅读 sun 和 oracle 网站上的内容,但对于它应该如何工作仍然很困惑。

感谢您的宝贵时间,

Infinitifizz

编辑:糟糕,忘记复制代码了。

服务器.java:

package exercise2;

import java.net.*;

public class Server
{
public static void main(String[] args) throws Exception
{
boolean listening = true;
ServerSocket server = new ServerSocket(8081);

while(listening)
{
Socket client = server.accept();

new ServerThread(client).start();
}
server.close();
}
}

ServerThread.java:

package exercise2;

import java.io.*;
import java.net.*;

public class ServerThread extends Thread
{
private Socket socket = null;
public ServerThread(Socket s)
{
this.socket = s;
}

public void run()
{
try
{

PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(
socket.getInputStream()));

String message, reply = "";

while((message = in.readLine()) != null)
{
System.out.println(message);
out.write("something");
}
System.out.println("test");
in.close();
out.close();
socket.close();
}
catch(IOException e)
{
System.err.println("error");
}
}
}

最佳答案

在没有看到您的客户端代码的情况下,这是我对正在发生的情况的最佳猜测:

您的服务器可能在该 readLine() 中阻塞,因为客户端已完成写入请求,但尚未关闭连接(因为它应该:客户端应该等待以通过同一连接获取响应)。通常,HTTP 服务器在读取请求时解析请求:基于 this ,您可以查找“\r\n\r\n”来划分 header 的末尾,并在此时跳出读取循环以解析请求并对其进行响应。

关于java - 带 PrintWriter 的简单 Java 服务器 - 向浏览器发送响应时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3979993/

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