JAVA課程設(shè)計之簡單聊天室_第1頁
JAVA課程設(shè)計之簡單聊天室_第2頁
JAVA課程設(shè)計之簡單聊天室_第3頁
JAVA課程設(shè)計之簡單聊天室_第4頁
JAVA課程設(shè)計之簡單聊天室_第5頁
已閱讀5頁,還剩68頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、. . . . 1課程設(shè)計報告課程名稱:Java程序設(shè)計課程代碼:題目:簡單聊天室年級/專業(yè)/班:學(xué)生:孟青學(xué) 號:指導(dǎo)老師:開題時間:完成時間:69 / 73目 錄摘要I1 引言12 設(shè)計任務(wù)與目的13 需求分析13.1 系統(tǒng)用例圖13.2 主要用例分析24系統(tǒng)設(shè)計34.1 總體設(shè)計34.1.1 系統(tǒng)類圖34.1.2 主要時序圖64.2 詳細(xì)設(shè)計84.2.1 ChatServer類94.2.2 ServerListen類104.2.3 ServerReceive類104.2.4 PortConf類114.2.5 Help類114.2.6 UserLinkList類114.2.7 Node類1

2、24.2.8 ChatClient類134.2.9 ConnectConf類154.2.10 UserConf類154.2.11 Help類164.2.12 ClientReceive類165 系統(tǒng)實現(xiàn)165.1 系統(tǒng)主要用例的實現(xiàn)165.1.1 聊天室服務(wù)端用例運行效果175.1.2 聊天室客戶端用例運行效果185.2 系統(tǒng)發(fā)布與運行185.2.1 系統(tǒng)打包185.2.2 系統(tǒng)發(fā)布與運行186 結(jié)束語19參考文獻19致19附錄A:系統(tǒng)源程序201、ChatServer類202、ServerListen類313、ServerReceive類324、UserLinkList類375、Node類3

3、96、PortConf類407、Help類428、ChatClient類449、ClientReceive類5610、ConnectConf類5811、UserConf類6112、Help類64附錄B:編碼規(guī)66摘 要本課程設(shè)計我們通過聊天室的代碼實現(xiàn),體會到將理論知識與具體實現(xiàn)相結(jié)合,鞏固Java相關(guān)方法。聊天室共分為服務(wù)器端和客戶端兩部分,服務(wù)器端程序主要負(fù)責(zé)偵聽客戶端發(fā)來的消息,客戶端需登陸到服務(wù)器才可以實現(xiàn)正常的聊天功能。本聊天系統(tǒng)以聊天交流為主,為廣大用戶提供一個借助網(wǎng)絡(luò)進行人際交往的平臺,也是網(wǎng)絡(luò)與現(xiàn)實最貼近的實用型。關(guān)鍵詞:(3-5個,每個之間用分號隔開)聊天室;多線程;C/S模

4、式Abstract The course design our chat room through the code, understand the theoretical knowledge and practical realization of the combination, the consolidation of java-related methods. Chat client and the server is divided into two parts, the client, server-side program is mainly responsible for li

5、stening client sent the news to be landing the client to the server will be realized only if the normal chat. The chat system to exchange-based chat, in order to provide customers with a network platform for interpersonal communication, but also network with the reality of the practical is the close

6、st site. Key words: Chat rooms, multi-threaded, C / S mode簡單聊天室1 引言隨著互聯(lián)網(wǎng)逐步普與,人們的生活和工作也越來越離不開信息網(wǎng)絡(luò)的支持, 而聊天室是人們最常見, 最直接的網(wǎng)上交流的方式。本聊天系統(tǒng)以聊天交流為主,為廣大用戶提供一個借助網(wǎng)絡(luò)進行人際交往的平臺,也是網(wǎng)絡(luò)與現(xiàn)實最貼近的實用型。本文所介紹的網(wǎng)絡(luò)聊天系統(tǒng)是基于開放的JAVA應(yīng)用程序開發(fā)設(shè)計的,其主要特性是能動態(tài)、實時的完成信息的傳遞,且具有高效的交互性,更有效的處理客戶請求, 且具有脫離數(shù)據(jù)庫技術(shù)方法, 易于維護和更新的特點。2 設(shè)計任務(wù)與目的本聊天室程序基于C/S模式,聊

7、天室共分為服務(wù)器端和客戶端兩部分,服務(wù)器端程序主要負(fù)責(zé)偵聽客戶端發(fā)來的消息,客戶端需登陸到服務(wù)器才可以實現(xiàn)正常的聊天功能。通過本項目的設(shè)計實踐,力求熟練掌握GUI程序設(shè)計、多線程技術(shù)、基于TCP的Socket通信編程。3 需求分析本系統(tǒng)所要實現(xiàn)的主要功能是為廣大用戶提供一個借助網(wǎng)絡(luò)進行人際交往的平臺。因為服務(wù)端采用多線程,所以性能有很大提升。因為服務(wù)端和客戶端之間采用TCP協(xié)議進行網(wǎng)絡(luò)通信,建立的是可靠的、端到端的網(wǎng)絡(luò)連接,所以可靠性和安全性都很好。3.1 系統(tǒng)用例圖圖3-1 系統(tǒng)用例圖3.2 主要用例分析服務(wù)器端的主要功能如下:1,在特定端口上進行偵聽,等待客戶端連接2,用戶可以配置服務(wù)端的

8、偵聽端口,默認(rèn)端口為8888.3,向已經(jīng)連接到服務(wù)端的用戶發(fā)送系統(tǒng)消息。4,統(tǒng)計在線人數(shù)5,當(dāng)停止服務(wù)時,斷開所有的用戶連接??蛻舳说闹饕δ苋缦拢?,連接到已經(jīng)開啟的聊天服務(wù)的服務(wù)端。2,用戶可以配置要連接服務(wù)器端的IP地址和端口號。3,用戶可以配置連接后顯示的用戶名。4,當(dāng)服務(wù)器端開啟的時候,用戶可以隨時登錄和注銷。5,用戶可以向所有人或者某一個人發(fā)送消息。4 系統(tǒng)設(shè)計4.1 總體設(shè)計4.1.1 系統(tǒng)類圖圖4-1-1 服務(wù)端系統(tǒng)類圖圖4-1-2 客戶端系統(tǒng)類圖4.1.2 主要時序圖圖4-2-1 服務(wù)端主要時序類圖圖4-2-2 客戶端主要時序類圖4.2 詳細(xì)設(shè)計聊天室服務(wù)器端的設(shè)計聊天室服務(wù)

9、端主要包括7個類,放在server包中:4.2.1 ChatServer類圖4-3 ChatServer類圖ChatServer.java包含名為ChatServer的public類,其主要功能為定義服務(wù)器端的界面,添加時間監(jiān)聽與時間處理。調(diào)用ServerListen類來實現(xiàn)服務(wù)端用戶上線與下線的監(jiān)聽,調(diào)用ServerListen來實現(xiàn)服務(wù)器端的消息收發(fā)。4.2.2 ServerListen類圖4-4 ServerListen類圖ServerListen.java 該類實現(xiàn)服務(wù)器用戶上線與下線的監(jiān)聽。該類對用戶上線下線的監(jiān)聽是通過調(diào)用用戶鏈表類(UserLinkList)來實現(xiàn)的。當(dāng)用戶上線與

10、下線情況發(fā)生變化時,該類會對主類的界面進行相應(yīng)的修改。4.2.3 ServerReceive類圖4-5 ServerReceive類圖ServerReceive.java該類是實現(xiàn)服務(wù)器消息收發(fā)的類,該類分別定義了向某用戶與所有人發(fā)送消息的方法,發(fā)送的消息會顯示在主界面類的街面上。4.2.4 PortConf類圖4-6 PortConf類圖PortConf.java 該類繼承自Jdialog,是用戶對服務(wù)器端監(jiān)聽端口進行修改配置的類。4.2.5 Help類圖4-7 Help類圖Help.java 服務(wù)端程序幫助類。4.2.6 UserLinkList類圖4-8 UserLinkList類圖Us

11、erLinkList.java 用戶鏈表節(jié)點的具體實現(xiàn)類。該類通過構(gòu)造函數(shù)構(gòu)造用戶鏈表,定義了添加用戶、刪除用戶、返回用戶數(shù)、根據(jù)用戶名查找用戶、根據(jù)索引查找用戶這5個方法。4.2.7 Node類圖4-9 Node類圖Node.java用戶鏈表的節(jié)點類,定義了鏈表中的用戶。該類與前面所講的鏈表節(jié)點Node類的功能相當(dāng)。聊天室客戶端設(shè)計聊天室客戶端主要包括5個類,放在client包中:4.2.8 ChatClient類圖4-10 ChatClient類圖ChatClient.java包含名為ChatClient的public類,其主要功能為定義客戶端的界面,添加時間監(jiān)聽與事件處理。該類定義了Co

12、nnect()與DisConnect()方法實現(xiàn)與客戶端的連接與斷開連接。當(dāng)?shù)顷懙街付ǖ姆?wù)器時,調(diào)用ClientReceive類實現(xiàn)消息收發(fā),同時該類還定義了SendMessaga()方法來其他用戶發(fā)送帶有表情的消息或悄悄話。4.2.9 ConnectConf類圖4-11 ConnectConf類圖ConnectConf.java該類繼承自Jdialog,是用戶對所有要連接的服務(wù)器IP與監(jiān)聽端口進行修改配置的類。4.2.10 UserConf類圖4-12 UserConf類圖UserConf.java該類繼承自Jdialog,是用戶對到服務(wù)器時所顯示的用戶名進行修改配置的類。4.2.11 H

13、elp類圖4-13 Help類圖Help.java客戶端程序的幫助類。4.2.12 ClientReceive類圖4-14 ClientReceive類圖ClientReceive.java該類是實現(xiàn)服務(wù)器端與客戶端消息收發(fā)的類。5 系統(tǒng)實現(xiàn)5.1 系統(tǒng)主要用例的實現(xiàn)5.1.1 聊天室服務(wù)端用例運行效果圖5-1 聊天室服務(wù)端用例運行效果圖5.1.2 聊天室客戶端用例運行效果圖5-2 聊天室客戶端用例運行效果圖5.2 系統(tǒng)發(fā)布與運行5.2.1 系統(tǒng)打包使用MyEclipse自帶的打包工具分別將server包和client包中的.class文件打成兩個Jar包:ChatServer.jar和Cha

14、rClient.jar 。5.2.2 系統(tǒng)發(fā)布與運行將server包和client包中的.class文件打成兩個Jar包,就可以發(fā)布系統(tǒng)了。直接分別雙擊兩個Jar包(ChatServer.jar和CharClient.jar),就可以運行服務(wù)端和客戶端了。6 結(jié)束語Java面向?qū)ο蟪绦蛟O(shè)計是一門應(yīng)用廣泛并且實用性極強的高級程序設(shè)計語言。通過本次課程設(shè)計,我們對面向?qū)ο蟮幕舅枷胗辛诉M一步的理解,對項目的各個階段的任務(wù)也有了一定的了解。設(shè)計開始階段必須明確設(shè)計的目的與需求分析,總體設(shè)計要全面分析聊天室系統(tǒng)的架構(gòu)。通過這次設(shè)計,使我們認(rèn)識到體系的架構(gòu)是最重要的,只有準(zhǔn)確的系統(tǒng)設(shè)計、很好的定義各個模

15、塊與模塊之間的關(guān)系,才能在編碼階段更輕松的的實現(xiàn)。通過這次課程設(shè)計,對我們的邏輯思維能力是一個很大的鍛煉,它不僅加強了我們的系統(tǒng)思考問題的能力,而且還改變了我們以前不好的編程習(xí)慣,雖然花費了不少的時間,但是我們學(xué)到了豐富的知識。另外,此次課程設(shè)計也提高了我們的團對合作精神,讓我們明白不是不能一個人能單獨完成,而是要集思廣益,結(jié)合更多的人的創(chuàng)意思維。讓我們大家深刻的體會到理論與實際相結(jié)合的重要性與微妙之處。對于不同的想法我們都會集中討論并對好的意見加以借鑒,在這個討論的過程中,還更正了不少我們各自自身對于某個知識點的誤區(qū)。這次程序設(shè)計也是一個毅力的考驗過程。有時候往往只是一個小小的錯誤,卻要花出

16、幾小時甚至是一兩天的時間才可能發(fā)現(xiàn)它。所以在這個過程不能過于急躁,要很有耐心將程序反復(fù)調(diào)試,參考文獻1 廣彬,孟紅蕊,永寶.Java課程設(shè)計案例精編M.:清華大學(xué),2007,1.2 黃曉東.Java課程設(shè)計案例精編M.:中國水利水電,2004,5.3 科技. Java信息管理系統(tǒng)開發(fā)實例導(dǎo)航M.:人民郵電,2005,4.4 科技.Java數(shù)據(jù)庫系統(tǒng)開發(fā)實例導(dǎo)航M.:人民郵電,2004,9.5廖衛(wèi)東Java程序設(shè)計實用指南M.:機械工業(yè),2002.136衛(wèi)華,傅曉東.Java語言基礎(chǔ)與其應(yīng)用M:中國水利水電,19965致本次課程由杰普公司三為指導(dǎo)老師以與我們?nèi)握n老師郭老師精心輔導(dǎo),讓我們大家深刻

17、的體會到理論與實際相結(jié)合的重要性與微妙之處。使我們對java有了更深刻的認(rèn)識,產(chǎn)生濃厚的學(xué)習(xí)興趣。我們由衷對他們表示感。附錄A:系統(tǒng)源程序1、ChatServer類功能:為定義服務(wù)器端的界面,添加時間監(jiān)聽與時間處理。調(diào)用ServerListen類來實現(xiàn)服務(wù)端用戶上線與下線的監(jiān)聽,調(diào)用ServerListen來實現(xiàn)服務(wù)器端的消息收發(fā)。代碼:package server;import java.awt.*;import java.awt.event.*;import javax.swing.*;import .*;/* * 聊天服務(wù)端的主框架類 */public class ChatServer

18、extends JFrame implements ActionListener/* * */private static final long serialVersionUID = 1L;public static int port = 8888;/服務(wù)端的偵聽端口ServerSocket serverSocket;/服務(wù)端SocketJComboBox combobox;/選擇發(fā)送消息的接受者JTextArea messageShow;/服務(wù)端的信息顯示JScrollPane messageScrollPane;/信息顯示的滾動條JTextField showStatus;/顯示用戶連接狀

19、態(tài)JLabel sendToLabel,messageLabel;JTextField sysMessage;/服務(wù)端消息的發(fā)送utton sysMessageButton;/服務(wù)端消息的發(fā)送按鈕UserLinkList userLinkList;/用戶鏈表/建立菜單欄JMenuBar jMenuBar = new JMenuBar(); /建立菜單組JMenu serviceMenu = new JMenu (服務(wù)(V); /建立菜單項JMenuItem portItem = new JMenuItem (端口設(shè)置(P);JMenuItem startItem = new JMenuItem

20、 (啟動服務(wù)(S);JMenuItem stopItem=new JMenuItem (停止服務(wù)(T);JMenuItem exitItem=new JMenuItem (退出(X);JMenu helpMenu=new JMenu (幫助(H);JMenuItem helpItem=new JMenuItem (幫助(H);/建立工具欄JToolBar toolBar = new JToolBar();/建立工具欄中的按鈕組件utton portSet;/啟動服務(wù)端偵聽utton startServer;/啟動服務(wù)端偵聽utton stopServer;/關(guān)閉服務(wù)端偵聽utton exitB

21、utton;/退出按鈕/框架的大小Dimension faceSize = new Dimension(400, 600);ServerListen listenThread;JPanel downPanel ;GridBagLayout girdBag;GridBagConstraints girdBagCon;/* * 服務(wù)端構(gòu)造函數(shù) */public ChatServer()init();/初始化程序/添加框架的關(guān)閉事件處理this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.pack();/設(shè)置框架的大小this.setSiz

22、e(faceSize);/設(shè)置運行時窗口的位置Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();this.setLocation( (int) (screenSize.width - faceSize.getWidth() / 2, (int) (screenSize.height - faceSize.getHeight() / 2);this.setResizable(false);this.setTitle(聊天室服務(wù)端); /設(shè)置標(biāo)題setVisible(true);/為服務(wù)菜單欄設(shè)置熱鍵Vservic

23、eMenu.setMnemonic(V);/為端口設(shè)置快捷鍵為ctrl+pportItem.setMnemonic (P); portItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_P,InputEvent.CTRL_MASK);/為啟動服務(wù)快捷鍵為ctrl+sstartItem.setMnemonic (S); startItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_S,InputEvent.CTRL_MASK);/為端口設(shè)置快捷鍵為ctrl+TstopIte

24、m.setMnemonic (T); stopItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_T,InputEvent.CTRL_MASK);/為退出設(shè)置快捷鍵為ctrl+xexitItem.setMnemonic (X); exitItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_X,InputEvent.CTRL_MASK);/為幫助菜單欄設(shè)置熱鍵HhelpMenu.setMnemonic(H);/為幫助設(shè)置快捷鍵為ctrl+phelpItem.setMnemo

25、nic (H); helpItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_H,InputEvent.CTRL_MASK);/* * 程序初始化函數(shù) */public void init()Container contentPane = getContentPane();contentPane.setLayout(new BorderLayout();/添加菜單欄serviceMenu.add (portItem);serviceMenu.add (startItem);serviceMenu.add (stopItem);ser

26、viceMenu.add (exitItem);jMenuBar.add (serviceMenu); helpMenu.add (helpItem);jMenuBar.add (helpMenu); setJMenuBar (jMenuBar);/初始化按鈕portSet = new utton(端口設(shè)置);startServer = new utton(啟動服務(wù));stopServer = new utton(停止服務(wù) );exitButton = new utton(退出 );/將按鈕添加到工具欄toolBar.add(portSet);toolBar.addSeparator();/添

27、加分隔欄toolBar.add(startServer);toolBar.add(stopServer);toolBar.addSeparator();/添加分隔欄toolBar.add(exitButton);contentPane.add(toolBar,BorderLayout.NORTH);/初始時,令停止服務(wù)按鈕不可用stopServer.setEnabled(false);stopItem .setEnabled(false);/為菜單欄添加事件監(jiān)聽portItem.addActionListener(this);startItem.addActionListener(this);

28、stopItem.addActionListener(this);exitItem.addActionListener(this);helpItem.addActionListener(this);/添加按鈕的事件偵聽portSet.addActionListener(this);startServer.addActionListener(this);stopServer.addActionListener(this);exitButton.addActionListener(this);combobox = new JComboBox();combobox.insertItemAt(所有人,

29、0);combobox.setSelectedIndex(0);messageShow = new JTextArea();messageShow.setEditable(false);/添加滾動條messageScrollPane = new JScrollPane(messageShow,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);messageScrollPane.setPreferredSize(new Dimension(400,400);messageScr

30、ollPane.revalidate();showStatus = new JTextField(35);showStatus.setEditable(false);sysMessage = new JTextField(24);sysMessage.setEnabled(false);sysMessageButton = new utton();sysMessageButton.setText(發(fā)送);/添加系統(tǒng)消息的事件偵聽sysMessage.addActionListener(this);sysMessageButton.addActionListener(this);sendToLa

31、bel = new JLabel(發(fā)送至:);messageLabel = new JLabel(發(fā)送消息:);downPanel = new JPanel();girdBag = new GridBagLayout();downPanel.setLayout(girdBag);girdBagCon = new GridBagConstraints();girdBagCon.gridx = 0;girdBagCon.gridy = 0;girdBagCon.gridwidth = 3;girdBagCon.gridheight = 2;girdBagCon.ipadx = 5;girdBagC

32、on.ipady = 5;JLabel none = new JLabel( );girdBag.setConstraints(none,girdBagCon);downPanel.add(none);girdBagCon = new GridBagConstraints();girdBagCon.gridx = 0;girdBagCon.gridy = 2;girdBagCon.insets = new Insets(1,0,0,0);girdBagCon.ipadx = 5;girdBagCon.ipady = 5;girdBag.setConstraints(sendToLabel,gi

33、rdBagCon);downPanel.add(sendToLabel);girdBagCon = new GridBagConstraints();girdBagCon.gridx =1;girdBagCon.gridy = 2;girdBagCon.anchor = GridBagConstraints.LINE_START;girdBag.setConstraints(combobox,girdBagCon);downPanel.add(combobox);girdBagCon = new GridBagConstraints();girdBagCon.gridx = 0;girdBag

34、Con.gridy = 3;girdBag.setConstraints(messageLabel,girdBagCon);downPanel.add(messageLabel);girdBagCon = new GridBagConstraints();girdBagCon.gridx = 1;girdBagCon.gridy = 3;girdBag.setConstraints(sysMessage,girdBagCon);downPanel.add(sysMessage);girdBagCon = new GridBagConstraints();girdBagCon.gridx = 2

35、;girdBagCon.gridy = 3;girdBag.setConstraints(sysMessageButton,girdBagCon);downPanel.add(sysMessageButton);girdBagCon = new GridBagConstraints();girdBagCon.gridx = 0;girdBagCon.gridy = 4;girdBagCon.gridwidth = 3;girdBag.setConstraints(showStatus,girdBagCon);downPanel.add(showStatus);contentPane.add(m

36、essageScrollPane,BorderLayout.CENTER);contentPane.add(downPanel,BorderLayout.SOUTH);/關(guān)閉程序時的操作this.addWindowListener(new WindowAdapter()public void windowClosing(WindowEvent e)stopService();System.exit(0););/* * 事件處理 */public void actionPerformed(ActionEvent e) Object obj = e.getSource();if (obj = st

37、artServer | obj = startItem) /啟動服務(wù)端startService();else if (obj = stopServer | obj = stopItem) /停止服務(wù)端int j=JOptionPane.showConfirmDialog(this,真的停止服務(wù)嗎?,停止服務(wù),JOptionPane.YES_OPTION,JOptionPane.QUESTION_MESSAGE);if (j = JOptionPane.YES_OPTION)stopService();else if (obj = portSet | obj = portItem) /端口設(shè)置/

38、調(diào)出端口設(shè)置的對話框PortConf portConf = new PortConf(this);portConf.setVisible(true);else if (obj = exitButton | obj = exitItem) /退出程序int j=JOptionPane.showConfirmDialog(this,真的要退出嗎?,退出,JOptionPane.YES_OPTION,JOptionPane.QUESTION_MESSAGE);if (j = JOptionPane.YES_OPTION)stopService();System.exit(0);else if (ob

39、j = helpItem) /菜單欄中的幫助/調(diào)出幫助對話框Help helpDialog = new Help(this);helpDialog.setVisible(true);else if (obj = sysMessage | obj = sysMessageButton) /發(fā)送系統(tǒng)消息sendSystemMessage();/* * 啟動服務(wù)端 */public void startService()tryserverSocket = new ServerSocket(port,10);messageShow.append(服務(wù)端已經(jīng)啟動,在+port+端口偵聽.n);start

40、Server.setEnabled(false);startItem.setEnabled(false);portSet.setEnabled(false);portItem.setEnabled(false);stopServer .setEnabled(true);stopItem .setEnabled(true);sysMessage.setEnabled(true);catch (Exception e)/System.out.println(e);userLinkList = new UserLinkList();listenThread = new ServerListen(se

41、rverSocket,combobox,messageShow,showStatus,userLinkList);listenThread.start();/* * 關(guān)閉服務(wù)端 */public void stopService()try/向所有人發(fā)送服務(wù)器關(guān)閉的消息sendStopToAll();listenThread.isStop = true;serverSocket.close();int count = userLinkList.getCount();int i =0;while( i count)Node node = userLinkList.findUser(i);node.

42、input .close();node.output.close();node.socket.close();i +;stopServer .setEnabled(false);stopItem .setEnabled(false);startServer.setEnabled(true);startItem.setEnabled(true);portSet.setEnabled(true);portItem.setEnabled(true);sysMessage.setEnabled(false);messageShow.append(服務(wù)端已經(jīng)關(guān)閉n);combobox.removeAll

43、Items();combobox.addItem(所有人);catch(Exception e)/System.out.println(e);/* * 向所有人發(fā)送服務(wù)器關(guān)閉的消息 */public void sendStopToAll()int count = userLinkList.getCount();int i = 0;while(i count)Node node = userLinkList.findUser(i);if(node = null) i +;continue;trynode.output.writeObject(服務(wù)關(guān)閉);node.output.flush();c

44、atch (Exception e)/System.out.println($+e);i+;/* * 向所有人發(fā)送消息 */public void sendMsgToAll(String msg)int count = userLinkList.getCount();/用戶總數(shù)int i = 0;while(i count)Node node = userLinkList.findUser(i);if(node = null) i +;continue;trynode.output.writeObject(系統(tǒng)信息);node.output.flush();node.output.writeO

45、bject(msg);node.output.flush();catch (Exception e)/System.out.println(+e);i+;sysMessage.setText();/* * 向客戶端用戶發(fā)送消息 */public void sendSystemMessage()String toSomebody = combobox.getSelectedItem().toString();String message = sysMessage.getText() + n;messageShow.append(message);/向所有人發(fā)送消息if(toSomebody.eq

46、ualsIgnoreCase(所有人)sendMsgToAll(message);else/向某個用戶發(fā)送消息Node node = userLinkList.findUser(toSomebody);trynode.output.writeObject(系統(tǒng)信息);node.output.flush();node.output.writeObject(message);node.output.flush();catch(Exception e)/System.out.println(!+e);sysMessage.setText();/將發(fā)送消息欄的消息清空public static voi

47、d main(String args) try UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName(); catch (ClassNotFoundException e) / TODO Auto-generated catch blocke.printStackTrace(); catch (InstantiationException e) / TODO Auto-generated catch blocke.printStackTrace(); catch (IllegalAccessException e) /

48、 TODO Auto-generated catch blocke.printStackTrace(); catch (UnsupportedLookAndFeelException e) / TODO Auto-generated catch blocke.printStackTrace();new ChatServer();2、ServerListen類功能:實現(xiàn)服務(wù)器用戶上線與下線的監(jiān)聽。該類對用戶上線下線的監(jiān)聽是通過調(diào)用用戶鏈表類(UserLinkList)來實現(xiàn)的。當(dāng)用戶上線與下線情況發(fā)生變化時,該類會對主類的界面進行相應(yīng)的修改。代碼:package server;import ja

49、vax.swing.*;import java.io.*;import .*;/* * 服務(wù)端的偵聽類 */public class ServerListen extends Thread ServerSocket server;JComboBox combobox;JTextArea textarea;JTextField textfield;UserLinkList userLinkList;/用戶鏈表Node client;ServerReceive recvThread;public boolean isStop;/* * 聊天服務(wù)端的用戶上線于下線偵聽類 */public ServerListen(ServerSocket server,JComboBox combobox,JTextArea textarea,JTextField textfield,UserLinkList userLinkList)this.server = server;this bobox = combobox;this.textarea = textarea;this.textfield = textfield;this.userLinkList = userLinkList;isStop = false;public void run()while(!isStop & !se

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論