java Socket 一个服务器与多个客户端进行通信

该博客介绍如何使用Java的Socket实现一个服务器与多个客户端的通信。服务器通过主线程接收客户端连接,并为每个连接创建一个工作线程进行处理。用户线程负责读取客户端发送的数据并回应。客户端代码则负责建立连接并发送、接收信息。通过这种方式,服务器能够并发地服务于多个客户端,实现了多用户聊天功能。


在实现一个服务器与多个客户端进行通信的时候,此时就需要引入多线程编程,用多个线程同时为多个客户提供服务,这时提高服务器你并发性能最长用的手段,服务器的主线程负责接收客户的连接,每次接收到一个客户连接就会创建一个工作线程,由它负责与客户通信。

多线程的服务器代码实现:

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();

}

}

首先启动服务器端,然后启动客户端(可以多启动几个),这样就实现了”多人聊天“

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值