91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java怎么實現群聊功能

發布時間:2022-05-19 16:46:19 來源:億速云 閱讀:237 作者:iii 欄目:開發技術

這篇文章主要介紹“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怎么實現群聊功能”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

塘沽区| 乾安县| 清镇市| 泰顺县| 东明县| 怀远县| 土默特右旗| 平罗县| 绵阳市| 新密市| 略阳县| 余干县| 墨脱县| 绍兴市| 项城市| 申扎县| 启东市| 四会市| 平安县| 洮南市| 昆明市| 麦盖提县| 宝应县| 罗源县| 边坝县| 册亨县| 清原| 外汇| 灵武市| 当雄县| 长沙市| 桂阳县| 沈阳市| 武安市| 屏山县| 山东省| 玉龙| 抚州市| 大港区| 防城港市| 清原|