gpt4 book ai didi

Java:实现多线程 Web 服务器

转载 作者:行者123 更新时间:2023-12-02 04:48:26 24 4
gpt4 key购买 nike

尝试处理 this assignment用于练习。很少有人被两个问题困扰。

  1. 在控制台上打印请求后,我应该在哪里停止线程?稍后我需要在发送响应后执行此操作。
  2. 我应该从哪里发回回复?我可以通过 processRequest() 轻松完成此操作。正在考虑是否有办法发回 HttpResponse。从 HttpRequest 类本身发送回响应可以吗?

代码

主类

public final class WebServer {

public static void main(String[] args) throws Exception {
int port = 1983;
final ServerSocket server = new ServerSocket(port);
System.out.println("Comes here");
Socket client = null;
while (true) {
client = server.accept();
System.out.println("Got the connection" + client.toString());
final HttpRequest request = new HttpRequest(client);
Thread thread = new Thread(request);
thread.start();

}
}

}

HttpRequest.java

final class HttpRequest implements Runnable {

Socket socket;

public HttpRequest(Socket socket) {
this.socket = socket;
}

@Override
public void run() {
try {
processRequest();
} catch (IOException e) {
e.printStackTrace();
}
}

private void processRequest() throws IOException {
String headerline = null;
DataOutputStream out = null;
BufferedReader in = null;
out = new DataOutputStream(socket.getOutputStream());
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

while ((headerline = in.readLine()).length() != 0) {
System.out.println(headerline);
}
out.close();
in.close();
socket.close();
}

}

最佳答案

  1. 一旦套接字关闭,线程就会终止。

  2. 要以这种形式输出到客户端,您必须生成自己的需要发送到客户端的 Http header 以及要发送到客户端的所有数据。为此,您可以执行以下操作:

    out.writeBytes(<HttpHeaderString>);

然后对于您的文件,您可以执行以下操作:

        FileInputStream fileToClient;
OutputStream toClient;
byte[] buffer = new byte[2048];
int bytes = 0;

while ((bytes = fileToClient.read(buffer)) != -1){
toClient.write(buffer, 0, bytes);
}

关于Java:实现多线程 Web 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29476803/

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