在实现一个服务器与多个客户端进行通信的时候,此时就需要引入多线程编程,用多个线程同时为多个客户提供服务,这时提高服务器你并发性能最长用的手段,服务器的主线程负责接收客户的连接,每次接收到一个客户连接就会创建一个工作线程,由它负责与客户通信。
多线程的服务器代码实现:
public class EChoService {
public static void main(String[] args)throws Exception{
ServerSocket serverSocket = new ServerSocket(8000);
System.out.println("服务器已经打开等待连接。。。");
boolean flag = true;
while(flag) { //主线程用来连接客户端,每次连接一个则开启一个新线程
Socket s = serverSocket.accept();
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("已经与客户端连接。。。");
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();
}
}
br.close();
ps.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
客户端代码如下:
public class EchoClient {
private static Socket s ;
public static void main(String[] args) throws UnknownHostException, IOException {
s = new Socket("localhost", 8000);
System.out.println("与服务器连接成功");
Scanner input = new Scanner(System.in);
PrintStream ps = new PrintStream(new BufferedOutputStream(s.getOutputStream()));
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
boolean flag = true;
while (flag) {
System.out.println("输入消息");
String info = input.next();
if ("bye".equals(info)) {
flag= false;
}else {
ps.println (info);
ps.flush();
System.out.println(br.readLine());
}
}
br.close();
ps.close();
}
}
首先启动服务器端,然后启动客户端(可以多启动几个),这样就实现了”多人聊天“
该博客介绍如何使用Java的Socket实现一个服务器与多个客户端的通信。服务器通过主线程接收客户端连接,并为每个连接创建一个工作线程进行处理。用户线程负责读取客户端发送的数据并回应。客户端代码则负责建立连接并发送、接收信息。通过这种方式,服务器能够并发地服务于多个客户端,实现了多用户聊天功能。
448

被折叠的 条评论
为什么被折叠?



