gpt4 book ai didi

java - 如何将简单的 Java Echo Server 改为多线程?

转载 作者:行者123 更新时间:2023-12-01 10:48:31 25 4
gpt4 key购买 nike

对于大学的一项任务,我们必须更改给出的示例:

“用 Java 构建并测试一个简单的单线程服务器程序,该程序将接受连接,通过该连接返回当前日期和时间,然后关闭连接。”

我们类的大多数人以前从未使用过JAVA,讲师说我们可以用任何方式编写它,只要它有效。

我修改了代码以生成以下内容:

import java.net.*;
import java.io.*;
import java.util.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;

public class EchoServer {
public static void main(String[] args) throws IOException {


int portNumber = 8080;


try {
ServerSocket serverSocket = new ServerSocket(portNumber);

while(true) {

Socket clientSocket = serverSocket.accept();

PrintWriter out =
new PrintWriter(clientSocket.getOutputStream(), true);

BufferedReader in = new BufferedReader(
new InputStreamReader(clientSocket.getInputStream()));

DateFormat df = new SimpleDateFormat("EEEE dd MMMM yyyy - HH:mm:ss");
Date dateobj = new Date();
//System.out.println(df.format(dateobj));

out.write("HTTP/1.1 200 OK\n\n<html><body>" + "The Date and Time is: " + df.format(dateobj) +
"</body></html>");

out.close();

serverSocket.close();

} //while
}

catch (IOException e) {
System.out.println("Oops!");
System.out.println(e.getMessage());
}


} //main

}

这工作正常,所以我很满意。

我们要做的下一部分是:

“复制您的解决方案并将其更改为多线程版本。”

我们获得了一些多线程代码的另一个示例:

    public class SimpleThread extends Thread{


protected String threadName;




public SimpleThread(String name){
threadName = name;
}



public void run(){
for(int count = 1; count< 100; count++) {
System.out.println("I am thread " + threadName + ". My count is: " + count);
//do something slow
//double result = Math.pow, 1.5);
}
}






public static void main(String[] args) {

System.out.println("Test");


for (int i = 0; i <10; i++) {
SimpleThread ste = new SimpleThread("Thread " + i);
ste.start();
}


}

}

我在网上搜索了大量教程并尝试将代码实现到我的代码中,但最终我只是破坏了它并且它无法编译。

那么如何更改代码以使其成为多线程?

最佳答案

在第一个版本中,您只接受一个连接,用它做一些事情,然后退出。

这里的想法是接受多个连接,这意味着循环(可能永远):

Socket clientSocket = serverSocket.accept();

每次以这种方式检索新的 clientSocket 时,您都应该实例化一个线程,将这个 clientSocket 传递给它,然后运行它并让它执行 clientSocket 的操作>clientSocket(读取、写入……)。

其中几个线程可能会同时运行。

关于java - 如何将简单的 Java Echo Server 改为多线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34046833/

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