java怎么实现群聊功能

本文主要介绍"java怎么实现群聊功能" 有关的知识,希望能够解决您遇到有关问题,下面我们一起来看看这篇 "java怎么实现群聊功能" 文章。

1、服务端

package networkCoding;   import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.util.concurrent.CopyOnWriteArrayList;   /**  *   * 1, 指定端口,使用serverSocket创建服务器  * 2, 阻塞式等待连接accept  * 3, 操作:输入输出流操作  * 4, 释放资源  *   * 5,加入容器实现群聊  *   * **/   public class WeiHuShanChatRoomServer {     private static CopyOnWriteArrayList<Chat> all= new CopyOnWriteArrayList<Chat>();       public static void main(String[] args) throws IOException {         System.out.println("-----server");          // 1, 指定端口,使用serverSocket创建服务器         ServerSocket server= new ServerSocket(9999);          // 2, 阻塞式等待连接accept         while(true) {         Socket client=server.accept();         Chat chat= new Chat(client);         // 交给容器管理         all.add(chat);         new Thread(chat) .start();         }     }     static class Chat implements Runnable{         private DataOutputStream dos;         private DataInputStream dis;         private Socket client;         private boolean isRuning;         private String name;         public Chat(Socket client) {             this.client=client;             this.isRuning=true;             try {                 this.dis = new DataInputStream(client.getInputStream());                 this.dos=new DataOutputStream(client.getOutputStream());                 this.name=receive();                 this.send(this.name+",威虎山欢迎你的到来");                 this.sendOthers(this.name+"来到了威虎山",true);             } catch (IOException e) {                 // 出错释放资源                 System.out.println("===1==");                 this.release();                          }         }         private String receive() {             String data="";             try {                 data= dis.readUTF();             } catch (IOException e) {                 System.out.println("===2==");                 //this.release();                              }             return data;         }         // 群聊         private void send(String data) {             try {                 dos.writeUTF(data);                 dos.flush();             } catch (IOException e) {                 System.out.println("===3==");                 this.release();                              }         }         private void sendOthers(String data,boolean isSys) {             boolean isPrivate = data.startsWith("@");              if(isPrivate) {                 int index= data.indexOf(":");                 String targetName=data.substring(1,index);                 String msg=data.substring(index+1);                 for (Chat chat : all) {                     if(chat.name.equals(targetName)) {                         System.out.println("******"+chat.name+targetName);                         chat.send(this.name+"悄悄对你说:"+msg);                     }                 }                              }else {                 for (Chat chat : all) {                     if(chat==this) {                         continue;                     }else {                         if(isSys) {                             chat.send(data);                         }else {                             chat.send(this.name+"对大家说:"+data);                         }                     }                                      }             }                      }         private void release() {             this.isRuning=false;             Utils.close(dis,dos,client);             all.remove(this);             sendOthers(this.name+"离开了威虎山", true);         }         @Override         public void run() {             while(isRuning) {                 String data = receive();                 if(!data.equals("")) {                      sendOthers(data,false);                 }else {                     send("不能发送空消息");                 }                              }                      }     }   }

2、客户端

package networkCoding;   import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.net.Socket; import java.net.UnknownHostException;   /**  *   * 1, 建立连接,使用socket 创建客户端 + 服务端的地址端口号;  * 2, 操作:输入输出流操作  * 3, 释放资源  *   * **/   public class WeiHuShanChatRoomClient {       public static void main(String[] args) throws UnknownHostException, IOException {         BufferedReader bf= new BufferedReader(new InputStreamReader(System.in));         System.out.println("请输入姓名");         String bfString = bf.readLine();         //1, 建立连接,使用socket 创建客户端 + 服务端的地址端口号;         Socket client = new Socket("localhost",9999);         // 2, 操作:输入输出流操作         new Thread(new Send(client,bfString)).start();         new Thread(new Receive(client)).start();              }        }

(1)发送封装类

package networkCoding;   import java.io.BufferedReader; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.net.Socket;   public class Send implements  Runnable{     private BufferedReader bf;     private DataOutputStream dos;     private Socket client;     private boolean isRuning;     private String name;     public Send(Socket client,String name) {         this.client=client;         this.isRuning=true;         this.name=name;         this.bf= new BufferedReader(new InputStreamReader(System.in));         try {             this.dos=new DataOutputStream(client.getOutputStream());             this.send(name);         } catch (IOException e) {             // 出错释放资源             System.out.println("===4==");             this.release();             this.isRuning=false;         }     }     private void release() {         this.isRuning=false;         Utils.close(dos,client);     }     private void send(String data) {         try {             dos.writeUTF(data);             dos.flush();         } catch (IOException e) {             System.out.println("===5==");             this.release();                      }     }     private String getString() {         String dataString ="";         try {             dataString = this.bf.readLine();         } catch (IOException e) {             System.out.println("===6==");             this.release();         }         return dataString;     }          @Override     public void run() {         // TODO Auto-generated method stub         while(isRuning) {             String data = getString();             if(!data.equals("")) {                 send(data);             }else {                 //send("不能发送空消息");             }                      }     }   }

(2)接收封装类

package networkCoding;   import java.io.BufferedReader; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.net.Socket;   public class Receive implements Runnable {     private DataInputStream dis;     private Socket client;     private boolean isRuning;     public Receive(Socket client) {         this.client=client;         this.isRuning=true;         try {             this.dis = new DataInputStream(client.getInputStream());         } catch (IOException e) {             // 出错释放资源             System.out.println("===6==");             this.release();             this.isRuning=false;         }     }     private String receive() {         String data="";         try {             data= dis.readUTF();         } catch (IOException e) {             System.out.println("===7==");             this.release();         }         return data;     }     private void release() {         this.isRuning=false;         Utils.close(dis,client);     }     @Override     public void run() {         while(isRuning) {             String data = receive();             if(!data.equals("")) {                 System.out.println(data);             }else {                              }                      }              }          }

3、工具类

package networkCoding;   import java.io.Closeable; import java.io.IOException;   public class Utils {     public static void main(String[] args) {              }     public static void close(Closeable...target) {         for (Closeable obj : target) {             try {                 if(null!=obj) {                     obj.close();                 }             } catch (IOException e) {                 // TODO Auto-generated catch block                 e.printStackTrace();             }         }     } }

关于 "java怎么实现群聊功能" 就介绍到这。希望大家多多支持编程宝库

本文主要介绍"Java如何实现鼠标随机移动效果" 有关的知识,希望能够解决您遇到有关问题,下面我们一起来看看这篇 "Java如何实现鼠标随机移动效果" 文章。实现代码import javax.swing.* ...