gpt4 book ai didi

java - 多线程网络服务器

转载 作者:行者123 更新时间:2023-12-01 14:05:36 25 4
gpt4 key购买 nike

嗨,我正在尝试创建一个多线程网络服务器我已经提到过 Link 1 Link 2

import java.net.*;
import java.io.*;
public class WebServer {

ServerSocket server;
public WebServer() {
try {
server=new ServerSocket(3000);
} catch (IOException ex) {
System.out.println("exc in const "+ex.getMessage());
}
}
Socket client;
BufferedReader br;
Thread t=new Thread(new Runnable(){
@Override
public void run() {
try{
System.out.println(br.readLine());
}
catch(Exception e){
System.out.println("exc is "+e);
}
}
});
public void RUN(){

while(true){
try {
client=server.accept();
System.out.println(client.getPort());
if(client!=null){
r=new BufferedReader(new InputStreamReader(client.getInputStream()));
t.start();
}
} catch (IOException ex) {
System.out.println("ex is "+ex.getMessage());
}
}
}
public static void main(String[] args) {
WebServer webserver=new WebServer();
try {
webserver.RUN();
} catch (Exception e) {
System.out.println("main "+e);
}
}
}

在上面的代码中,我不断收到线程非法访问异常,那么为什么我不断收到此异常我想在浏览器中打开多个选项卡并打开 localhost:3000 然后服务器必须打印 http 请求和端口号,但这仅发生在第一个客户端上,而不是其他客户端上,它显示非法线程访问异常并且程序终止

如果有任何页面告诉您如何在网络浏览器中显示某些内容,我们将非常感激。

最佳答案

正如您可以在 Thread 的文档中阅读的那样类方法 start() 抛出异常如果线程已经启动,则出现 IllegalThreadStateException。

在您的代码中,您仅创建线程一次,并尝试多次运行它。

如何解决?行前:

t.start();

你应该创建新线程

Thread t=new Thread(new Runnable(){
@Override
public void run() {
try{
System.out.println(br.readLine());
}
catch(Exception e){
System.out.println("exc is "+e);
}
}
});

编辑:关于评论中的问题。当你启动线程时,它就开始有自己的生活。你可以例如。通过调用线程对象上的join()方法来等待终止。 Thread 类的规范说明了它的工作方式,并且说明您无法重新运行它。

关于java - 多线程网络服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18936113/

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