您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
javase第三季学习笔记-服务器同时处理多个客户端
发布时间:2017-08-10 15:38:38编辑:雪饮阅读()
服务器同时处理多个客户端
目前为止我们编写的程序中,服务器只能同时处理一个客户端连接,要想服务器同时支持多个客户端的连接,就必须加入多线程的处理机制,将每一个连接的客户端都创建一个新的线程对象
示例代码:客户端代码不变
服务端代码如下:
package com.vince.echo;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
public class EchoServerDemo {
public static void main(String[] args) throws IOException {
//创建一个服务端的socket
ServerSocket ss=new ServerSocket(8000);
System.out.println("服务器已启动");
boolean flag=true;
while(flag){
System.out.println("正在等待连接。。。");
Socket s=ss.accept();
//每来一个新请求都创建一个新的socket线程(绑定socket),为每个请求分配独立的socket线程
new Thread(new UserThread(s)).start();
}
}
}
//处理用户请求的线程
class UserThread implements Runnable{
private Socket s;
public UserThread(Socket s){
this.s=s;
}
public void run(){
System.out.println(s.getInetAddress().getHostAddress()+"已连接");
try {
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
PrintStream ps=new PrintStream(new BufferedOutputStream(s.getOutputStream()));
boolean bool=true;
while(bool){
String info=br.readLine();
if("".equals(info)||"bye".equals(info)){
bool=false;
}
else{
System.out.println(info);
ps.println("echo:"+info);
ps.flush();
}
}
ps.close();
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
关键字词:javase,服务器同时处理多个客户端
上一篇:javase第三季学习笔记-泛型