首页 > 代码库 > Socket 群聊功能

Socket 群聊功能

1、Server端:

  拥有一个存放与客户端连接对象的List<socket> 有一个客户端发信息后 遍历List 实现群发功能 代码如下:

  

 1 package com.socket; 2  3 import java.io.BufferedReader; 4 import java.io.IOException; 5 import java.io.InputStreamReader; 6 import java.io.PrintWriter; 7 import java.net.ServerSocket; 8 import java.net.Socket; 9 import java.util.ArrayList;10 import java.util.List;11 12 public class MyServer {13     14     public static void main(String[] args) throws Exception {15         ServerSocket ss = new ServerSocket(10002);16         List<Socket> allClient = new ArrayList<>();17         System.out.println("server is starting....");18         while(true){19             Socket s = ss.accept();20             allClient.add(s);21             new Thread(new ServerThread(s, allClient)).start();22         }23     }24 25 }26 class ServerThread implements Runnable{27     private Socket s;28     private List<Socket> allClient;29     30     public ServerThread(Socket s, List<Socket> allClient) {31         super();32         this.s = s;33         this.allClient = allClient;34     }35 36     @Override37     public void run() {38         try {39             System.out.println(s.getInetAddress().getHostAddress()+"上线了...");40             BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));41             String line = null;42             while((line = in.readLine())!=null){43                 for(Socket soc:allClient){44                     //向其他客户端发信息45                     if(!soc.equals(s)){46                         PrintWriter pw = new PrintWriter(soc.getOutputStream(),true);47                         pw.println(line);48                     }49                 }50             }51         } catch (IOException e) {52             // TODO Auto-generated catch block53             e.printStackTrace();54         }55         56     }57     58 }

2、客户端:
  客户端需要注意的是用户不仅可以输入,还可以随时的接受服务端发来的信息,这就要求读和写分开两个线程来操作代码如下:

  

 1 package com.socket; 2  3 import java.io.BufferedReader; 4 import java.io.IOException; 5 import java.io.InputStreamReader; 6 import java.io.PrintWriter; 7 import java.net.InetAddress; 8 import java.net.Socket; 9 10 public class Client {11     12     public static void main(String[] args) throws IOException, Exception {13         final Socket s = new Socket(InetAddress.getLocalHost(),10002);14         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));15         PrintWriter pw = new PrintWriter(s.getOutputStream(),true);16         String line = null;17         new Thread(new Runnable() {18             @Override19             public void run() {20                 try {21                     BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));22                     String str = null;23                     while((str = br.readLine())!=null){24                         System.out.println(str);25                     }26                 } catch (IOException e) {27                     // TODO Auto-generated catch block28                     e.printStackTrace();29                 }30             }31         }).start();32         while ((line = br.readLine())!=null){33             pw.println(line);34         }35         s.close();36         br.close();37     }38 }

 

Socket 群聊功能