客户端向服务器发出连结申请的时候,一个服务器只能同时与一个客户端相连接。就相当于当
同时有多个客户端申请连结时,这些客户端要排队,只有上一个客户端退出的时候,下一个客
户端才能连结的上,也就是“阻塞”现象。要解决这个问题,就要用到服务器的多线程。
服务器的多线程不是每启动一个线程,就创建一个服务器,而是每当有一个客户端申请连结的
时候,就启动一个服务器连结客户端的方法。也就是说,多线程不是创建服务器的多线程,而
是连结客户端的多线程。
线程代码:
启动线程部分代码
多线程这里,我出现了一次很纠结的逻辑混乱情况,所以在写代码之前,一定要先想好逻辑关系,不然容易出错
同时有多个客户端申请连结时,这些客户端要排队,只有上一个客户端退出的时候,下一个客
户端才能连结的上,也就是“阻塞”现象。要解决这个问题,就要用到服务器的多线程。
服务器的多线程不是每启动一个线程,就创建一个服务器,而是每当有一个客户端申请连结的
时候,就启动一个服务器连结客户端的方法。也就是说,多线程不是创建服务器的多线程,而
是连结客户端的多线程。
线程代码:
public class ServerThread extends Thread{
private ChatServer cs;
private Socket client;
public ServerThread(Socket client, ChatServer cs){
this.client = client;
this.cs = cs;
}
public void run(){
doconn(client);
}
/**
* 处理连结之后的方法
* @param client
*/
public void doconn(Socket client){
//方法内容略
}
}
启动线程部分代码
while(true){
Socket client = server.accept();
ServerThread st = new ServerThread(client,this);
st.start();
}
多线程这里,我出现了一次很纠结的逻辑混乱情况,所以在写代码之前,一定要先想好逻辑关系,不然容易出错