日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Java多線程實現多人聊天室功能

瀏覽:35日期:2022-08-09 17:53:08

本文為大家分享了Java多線程實現多人聊天室功能的具體代碼,供大家參考,具體內容如下

1.實驗目的:

編寫一個 Java 應用程序,實現圖形界面多人聊天室(多線程實現),要求聊天室窗口標題是 “歡迎使用 XXX 聊天室應用”,其中 XXX 是自己的班級姓名學號,如“軟件 171 張三 1234”。

2.實驗代碼:

服務端程序代碼:

ServerChar.java

package works;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;import java.util.Collection;import java.util.Collections;import java.util.HashMap;import java.util.Map;import java.util.Set;public class ServerChat { //定義Map集合用于存儲用戶的Socket以及用戶的名字 key:Socket Value:用戶名 public final static Map<Socket,String> socketsMaps = Collections.synchronizedMap(new HashMap<Socket,String>()); public static void main(String[] args) { // TODO Auto-generated method stub try { // 創建服務端套接字 ServerSocket serverSocket = new ServerSocket(9999); System.out.println('------服務端暴露-------'); while (true) { // 監聽客戶端套接字,若有客戶端連接,則代碼不會往下執行,否則會堵塞在此處。 Socket socket = serverSocket.accept(); // 開啟線程,用于讀取客戶端發送的信息,并轉發給每一個客戶端 new ThreadServer(socket).start(); } } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } }}class ThreadServer extends Thread { private Socket socket; ThreadServer(){}; ThreadServer(Socket socket) { this.socket = socket; } @Override public void run() { try { while(true) { DataInputStream dataInputStream = new DataInputStream(socket.getInputStream()); String data = dataInputStream.readUTF();if(data.startsWith('①②③④')&&data.endsWith('①②③④')) { //發送過來的是用戶名 //將Socket以及用戶名字都存放在Map集合中 ServerChat.socketsMaps.put(socket, data.replace('①②③④','')); //獲取所有的key(Socket),將所有用戶的名字發送至客戶端 Set<Socket> sockets = ServerChat.socketsMaps.keySet(); //獲取所有的用戶的名字,將這些名字拼裝成一個字符串 Collection<String> names = ServerChat.socketsMaps.values(); StringBuffer sbf = new StringBuffer(); for(String userName :names) { sbf.append(userName).append(','); } System.out.println('sbf:'+sbf.toString()); for(Socket soc:sockets) { DataOutputStream dataOutputStream = new DataOutputStream(soc.getOutputStream()); dataOutputStream.writeUTF('①②③④'+sbf.toString()+'①②③④'); dataOutputStream.flush(); } } else{ //發送過來的是聊天信息 //獲取所有的key(Socket),將所有用戶的名字發送至客戶端 Set<Socket> sockets = ServerChat.socketsMaps.keySet(); //?⒘奶煨畔⒐悴コ鋈 for(Socket soc:sockets) { DataOutputStream dataOutputStream = new DataOutputStream(soc.getOutputStream()); dataOutputStream.writeUTF('[ '+ServerChat.socketsMaps.get(socket)+' ]說:'+data); dataOutputStream.flush(); } } } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}

客戶端程序代碼:

ClientChar.java

package works;import java.awt.BorderLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.net.Socket;import javax.swing.Box;import javax.swing.BoxLayout;import javax.swing.DefaultListModel;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JList;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTextArea;public class ClientChat { private JFrame mainWin = new JFrame('聊天窗口'); // 消息展示框 private JTextArea displayTa = new JTextArea(14, 40); // 在線用戶名稱展示框 private DefaultListModel<String> userListModel = new DefaultListModel<>(); private JList<String> userList = new JList<>(userListModel); // 消息發送框 private JTextArea inputTF = new JTextArea(4, 40); // 消息按鈕 private JButton sendBn = new JButton('發送'); // 用戶記錄當前聊天用戶名 private String curUser; public static void main(String[] args) { new ClientChat().init(); } private void init() { try { // 通過彈出對話框獲取用戶輸入的用戶名 String userName = JOptionPane.showInputDialog(mainWin, '請輸入您的用戶名:'); // 把用戶輸入的用戶名,賦給curUser curUser = userName; mainWin.setTitle(curUser + '的聊天窗口'); // 創建套接字 Socket socket = new Socket('192.168.193.1', 9999); // 向服務器聲明 DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream()); //發送用戶名到服務端 dataOutputStream.writeUTF('①②③④'+userName+'①②③④'); dataOutputStream.flush(); // 開啟線程,用于讀取服務器發送的信息 new ThreadClient(socket, this).start(); JPanel bottomPanel = new JPanel(); // 將消息框和按鈕添加到窗口的底端 mainWin.add(bottomPanel, BorderLayout.SOUTH); bottomPanel.add(inputTF); bottomPanel.add(sendBn); ActionListener listener = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // 獲取用戶發送的消息 String message = inputTF.getText(); sendSms(message,socket); } }; // 給發送消息按鈕綁定點擊事件監聽器 sendBn.addActionListener(listener); JPanel centerPanel = new JPanel(); // 將展示消息區centerPanel添加到窗口的中間 mainWin.add(centerPanel); // 讓展示消息區可以滾動 centerPanel.add(new JScrollPane(displayTa)); displayTa.setEditable(false); // 用戶列表和是否私聊放到窗口的最右邊 Box rightBox = new Box(BoxLayout.Y_AXIS); userList.setFixedCellWidth(60); userList.setVisibleRowCount(13); rightBox.add(new JLabel('用戶列表:')); rightBox.add(new JScrollPane(userList)); centerPanel.add(rightBox); // 關閉窗口退出當前程序 mainWin.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); mainWin.pack(); // swing加上這句就可以擁有關閉窗口的功能 mainWin.setVisible(true); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } //點擊發送后將消息發送到服務器 protected void sendSms(String sms, Socket socket) { try { //發送聊天消息到服務端 DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream()); dataOutputStream.writeUTF(sms); dataOutputStream.flush(); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } public DefaultListModel<String> getUserListModel() { return userListModel; } public JTextArea getDisplayTa() { return displayTa; } public JTextArea getInputTF() { return inputTF; }}// 定義線程類,用來讀取服務器發送的信息class ThreadClient extends Thread { private Socket socket; private ClientChat clientChat; ThreadClient() { } ThreadClient(Socket socket, ClientChat clientChat) { this.socket = socket; this.clientChat = clientChat; } @Override public void run() { try { while (true) { DataInputStream DataInputStream = new DataInputStream(socket.getInputStream()); String message = DataInputStream.readUTF(); if(message.startsWith('①②③④')&&message.endsWith('①②③④')) { //說明信息是用戶名 String[] names = message.replace('①②③④','').split(','); // 將用戶列表先清空 clientChat.getUserListModel().clear(); for (int i = 0; i < names.length; ++i) { clientChat.getUserListModel().addElement(names[i]); } } else { //說明是聊天信息,將聊天信息放在displayTa中 clientChat.getInputTF().setText(''); clientChat.getDisplayTa().append(message+'tn'); } } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}3.實驗截圖

先開啟服務端

Java多線程實現多人聊天室功能

再開啟客戶端

Java多線程實現多人聊天室功能

聊天過程

Java多線程實現多人聊天室功能

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
精品网站999| 久久国产亚洲| 日韩av有码| 日韩成人亚洲| 中文不卡在线| 久久免费影院| 欧美日韩水蜜桃| 亚洲欧洲专区| 色婷婷色综合| 日韩精品免费视频一区二区三区 | 亚洲一区不卡| 日本aⅴ亚洲精品中文乱码| 亚洲精品在线国产| 日韩一区二区三区在线免费观看| 日韩毛片网站| 免费看黄色91| 亚洲精品一二三区区别| 精品伊人久久| 日韩欧美中文字幕电影| 久久亚洲影院| 国产视频亚洲| 国模 一区 二区 三区| 色黄视频在线观看| 精品中文字幕一区二区三区四区| 亚洲三级毛片| 日韩av片子| 国产日韩一区二区三免费高清| 亚洲人妖在线| 热久久久久久| 麻豆国产91在线播放| 国产图片一区| 久久久亚洲欧洲日产| 黄色网一区二区| 国产传媒在线观看| 久久精品亚洲人成影院 | 亚洲国产专区| 欧美激情麻豆| 福利片在线一区二区| 日本h片久久| 日韩福利视频导航| 国产a亚洲精品| 久久青青视频| 亚洲日韩视频| 国产乱人伦丫前精品视频| 欧美国产极品| 亚洲欧美日韩精品一区二区| 一区二区不卡| 国产亚洲福利| 97精品国产一区二区三区| 美女福利一区二区三区| 久久久久中文| 成人在线网站| 亚洲一区二区小说| 精品视频网站| 久久激情综合网| 麻豆9191精品国产| 精品中国亚洲| 99在线观看免费视频精品观看| 久久国产日韩欧美精品| 亚洲视频电影在线| 先锋影音国产一区| 日韩欧美国产精品综合嫩v| 美腿丝袜亚洲三区| 日韩黄色免费网站| 老鸭窝一区二区久久精品| 午夜久久影院| 激情丁香综合| 香蕉人人精品| 久久久精品国产**网站| 亚洲三级观看| 亚洲三级毛片| 日韩精品亚洲专区| 国产精品伦一区二区| 九九九精品视频| 麻豆国产精品777777在线| 欧美黄页在线免费观看| 免费亚洲一区| 婷婷综合六月| 美女网站视频一区| 91精品国产调教在线观看| 国产99久久久国产精品成人免费| 麻豆精品在线播放| 日韩高清在线观看一区二区| 亚洲中字黄色| 91精品精品| 黑丝美女一区二区| 激情六月综合| 国产一区2区在线观看| 久久久精品久久久久久96 | 国产精品视频一区二区三区综合| 五月天激情综合网| 精品日韩一区| 亚洲爱爱视频| 欧美日韩精品一本二本三本 | 日韩免费精品| 丰满少妇一区| 国产精品久久久久毛片大屁完整版| 亚洲精品无吗| 婷婷综合国产| 夜夜嗨一区二区三区| 激情综合网站| 色在线视频观看| 麻豆国产欧美一区二区三区| 婷婷亚洲五月色综合| а√在线中文在线新版| 久久av免费| 精品精品99| аⅴ资源天堂资源库在线| 国产精品日本欧美一区二区三区| 新版的欧美在线视频| 美女少妇全过程你懂的久久| 免费不卡在线观看| 国产乱码精品一区二区三区亚洲人| sm捆绑调教国产免费网站在线观看 | 红桃视频国产精品| 天堂а√在线最新版中文在线| 亚洲特级毛片| 午夜国产欧美理论在线播放| 亚洲精品.com| 老牛影视精品| 久久三级福利| 亚洲二区三区不卡| 九九九精品视频| 久久精品国产免费| 亚洲91在线| 国产精品蜜月aⅴ在线| 精品国产欧美日韩| 国产精品亚洲综合久久| 青青草伊人久久| 国产videos久久| 国产剧情一区| 久久精品99久久久| 日本不卡一区二区三区| 蜜桃视频在线观看一区二区| 婷婷亚洲综合| 亚洲综合不卡| 玖玖精品视频| 亚洲精品成人一区| 亚洲tv在线| 国内精品麻豆美女在线播放视频| 国产精品亚洲人成在99www| 亚州av一区| 亚洲久草在线| 欧美欧美黄在线二区| 久久精品999| 日本va欧美va欧美va精品| 欧美精品自拍| 久久香蕉国产| 亚洲v在线看| 国产综合激情| 精品网站aaa| 久久99性xxx老妇胖精品| 91亚洲精品视频在线观看| 国产欧美一区| 日韩免费久久| 亚洲91网站| 久久国产精品免费一区二区三区| 国产精品s色| 日韩大片在线播放| 国产婷婷精品| 婷婷成人在线| 久久精品超碰| 日本成人在线不卡视频| 日本一区中文字幕| 日本99精品| 狠狠躁少妇一区二区三区| 欧美日韩精品免费观看视完整| yellow在线观看网址| 日韩免费一区| 合欧美一区二区三区| 国产一区二区三区成人欧美日韩在线观看| 国产精品一级| 黄色欧美在线| 91久久久久| 国产探花一区在线观看| 亚洲午夜国产成人| 欧美日韩国产免费观看| 免费观看亚洲| 欧美精品中文字幕亚洲专区| 精品视频久久| 国产一区久久| 一本大道色婷婷在线| 欧美亚洲免费| 精品国产成人| 亚洲欧洲av| 久久国产三级精品| 九九色在线视频| 久久国产精品亚洲77777| 欧美成a人片免费观看久久五月天| 丝袜脚交一区二区| zzzwww在线看片免费| 日本亚洲欧美天堂免费| 精品成av人一区二区三区| 久久婷婷一区| 亚洲资源av| 精品免费av| 亚洲精品欧洲| 免费久久精品视频| 日韩一区二区久久| 久久精品高清|