計(jì)算機(jī)網(wǎng)絡(luò)聊天室課程設(shè)計(jì)_第1頁(yè)
計(jì)算機(jī)網(wǎng)絡(luò)聊天室課程設(shè)計(jì)_第2頁(yè)
計(jì)算機(jī)網(wǎng)絡(luò)聊天室課程設(shè)計(jì)_第3頁(yè)
計(jì)算機(jī)網(wǎng)絡(luò)聊天室課程設(shè)計(jì)_第4頁(yè)
計(jì)算機(jī)網(wǎng)絡(luò)聊天室課程設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩9頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、.計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)報(bào)告設(shè)計(jì)題目: 聊天室 同組人姓名: 王巍瑾 馬志超 周 旭 同組人學(xué)號(hào): 20151515105 20151515104 20151515138 專業(yè)班級(jí): 計(jì)科153 指導(dǎo)教師: 金松林 日 期: 2017年6月12日16日 一、 題目意義和需求分析1. 題目意義即時(shí)通訊或在線聊天是目前Internet上最為流行的通訊方式,用戶之間通過文字傳輸信息。這是一種可以讓使用者在網(wǎng)絡(luò)上建立私人聊天室的實(shí)時(shí)通訊服務(wù)。除了簡(jiǎn)單的文字信息,使用者之間還可以互相發(fā)送文件、文檔、音樂、視頻等文件。只要與服務(wù)器鏈接,無論對(duì)方在天涯海角,雙方隔得多遠(yuǎn)都沒有問題。消息的實(shí)時(shí)更新,拉近了我們相知

2、的橋梁,文件的相互傳輸,使同事之間辦公更方便快捷。2. 需求分析a. 注冊(cè)當(dāng)選擇注冊(cè)時(shí),創(chuàng)建一個(gè)File文件類,載入“user.txt”,判斷用戶名是否已經(jīng)存在,用戶名有效后寫入“user.txt”。b. 登錄去“user.txt”讀取用戶數(shù)據(jù),驗(yàn)證用戶名是否存在,驗(yàn)證用戶密碼是否正確,如果以上驗(yàn)證全部正確,返回客戶端信息,提示登陸成功進(jìn)入聊天界面。c. 聊天所有已登錄的用戶的名稱都會(huì)在列表中顯示,然后就可以選擇其中一個(gè)或多個(gè)發(fā)起聊天。接收用戶聊天信息,當(dāng)用戶發(fā)送聊天信息時(shí),服務(wù)端將會(huì)收到客戶端用Socket傳輸過來的聊天信息對(duì)象,然后將其轉(zhuǎn)換為Message對(duì)象,返回聊天信息,然后系統(tǒng)從Me

3、ssage中提取消息類型,再根據(jù)類型將消息轉(zhuǎn)化后通過Socket轉(zhuǎn)發(fā)到相應(yīng)的用戶。d. 文件傳輸在聊天的基礎(chǔ)上增加了一個(gè)文件傳輸功能。同事之間辦公難免有一些資料的來往,在登錄列表中選擇一個(gè)用戶或多個(gè)用戶發(fā)送文件,等對(duì)方確認(rèn)接收后即可建立連接進(jìn)行文件傳輸。二、設(shè)計(jì)說明聊天室總體分為三個(gè)模塊 ,主要包括注冊(cè)登錄,聊天模塊,文件傳輸模塊。系統(tǒng)運(yùn)行在java環(huán)境中,要求java環(huán)境為JDK 1.8+;設(shè)計(jì)中的重點(diǎn)是通過Java中的ServerSocket搭建TCP服務(wù)器,通過在客戶端創(chuàng)建Socket套接字連接服務(wù)器,然后通過ObjectOutputStream來發(fā)送Message(數(shù)據(jù)消息的封裝類)對(duì)

4、象讓服務(wù)器接受。通過線程來存儲(chǔ)來存儲(chǔ)用戶的Socket連接狀態(tài),接受并處理用戶發(fā)過來的信息,返回處理信息。客戶機(jī)也通過線程來接受服務(wù)器的處理數(shù)據(jù)做出響應(yīng)。設(shè)計(jì)的難點(diǎn)是文件的傳輸,首先通過原有的服務(wù)器獲得目標(biāo)客戶機(jī)的IP地址和端口,然后在客戶機(jī)上建立服務(wù)器,通過要發(fā)送的文件的客戶機(jī)連接接受文件的客戶機(jī)用DataInputStream 和DataOutputStream 來推送到輸入、輸出流。然后客戶機(jī)接受并保存。三、系統(tǒng)詳細(xì)設(shè)計(jì)1. 功能模塊2. 流程圖注冊(cè)向好友發(fā)送文件跟好友聊天登錄聊天賬戶四、程序源代碼及注釋public ChatRoom(String u_name, Socket clie

5、nt) / 賦值name = u_name;clientSocket = client;onlines = new Vector();setTitle(name);setResizable(false);setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);setBounds(200, 100, 688, 510);contentPane = new JPanel();setContentPane(contentPane);contentPane.setLayout(null);/ 聊天信息顯示區(qū)域JScrollPane scrollPane

6、 = new JScrollPane();scrollPane.setBounds(10, 10, 410, 300);getContentPane().add(scrollPane);textArea = new JTextArea();textArea.setEditable(false);textArea.setLineWrap(true);/激活自動(dòng)換行功能 textArea.setWrapStyleWord(true);/激活斷行不斷字功能 textArea.setFont(new Font(sdf, Font.BOLD, 13);scrollPane.setViewportView

7、(textArea);/ 打字區(qū)域JScrollPane scrollPane_1 = new JScrollPane();scrollPane_1.setBounds(10, 347, 411, 97);getContentPane().add(scrollPane_1);final JTextArea textArea_1 = new JTextArea();textArea_1.setLineWrap(true);/激活自動(dòng)換行功能 textArea_1.setWrapStyleWord(true);/激活斷行不斷字功能 scrollPane_1.setViewportView(text

8、Area_1);/ 關(guān)閉按鈕final JButton btnNewButton = new JButton(關(guān)閉);btnNewButton.setBounds(214, 448, 60, 30);getContentPane().add(btnNewButton);/ 發(fā)送按鈕JButton btnNewButton_1 = new JButton(發(fā)送);btnNewButton_1.setBounds(313, 448, 60, 30);getRootPane().setDefaultButton(btnNewButton_1);getContentPane().add(btnNewB

9、utton_1);/ 在線客戶列表listmodel = new UUListModel(onlines) ;list = new JList(listmodel);list.setCellRenderer(new CellRenderer();list.setOpaque(false);Border etch = BorderFactory.createEtchedBorder();list.setBorder(BorderFactory.createTitledBorder(etch, +在線用戶:, TitledBorder.LEADING, TitledBorder.TOP, new

10、Font(sdf, Font.ITALIC, 20), Color.black);JScrollPane scrollPane_2 = new JScrollPane(list);scrollPane_2.setBounds(430, 10, 245, 375);scrollPane_2.setOpaque(false);scrollPane_2.getViewport().setOpaque(false);getContentPane().add(scrollPane_2);/ 文件傳輸欄progressBar = new JProgressBar();progressBar.setBoun

11、ds(430, 390, 245, 15);progressBar.setMinimum(1);progressBar.setMaximum(100);getContentPane().add(progressBar);/ 文件傳輸提示lblNewLabel = new JLabel(文件傳輸信息欄:);lblNewLabel.setFont(new Font(SimSun, Font.PLAIN, 12);lblNewLabel.setBackground(Color.WHITE);lblNewLabel.setBounds(430, 410, 245, 15);getContentPane

12、().add(lblNewLabel);try oos = new ObjectOutputStream(clientSocket.getOutputStream();/ 記錄上線客戶的信息,并發(fā)送給服務(wù)器Message toMsg = new Message();toMsg.setType(0);toMsg.setName(name);toMsg.setTimer(getTimer();oos.writeObject(toMsg);oos.flush();/ 啟動(dòng)客戶接收線程CThread = new ClientInputThread();CThread.start(); catch (I

13、OException e) / TODO Auto-generated catch blocke.printStackTrace();/ 發(fā)送按鈕btnNewButton_1.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) String info = textArea_1.getText();List to = list.getSelectedValuesList();if (to.size() 1) JOptionPane.showMessageDialog(getConten

14、tPane(), 請(qǐng)選擇聊天對(duì)象);return;if (to.toString().contains(name+(我) JOptionPane.showMessageDialog(getContentPane(), 不能向自己發(fā)送信息);return;if (info.equals() JOptionPane.showMessageDialog(getContentPane(), 不能發(fā)送空信息);return;Message toMsg = new Message();toMsg.setType(1);toMsg.setName(name);String time = getTimer()

15、;toMsg.setTimer(time);toMsg.setInfo(info);HashSet set = new HashSet();set.addAll(to);toMsg.setClients(set);/ 自己發(fā)的內(nèi)容也要現(xiàn)實(shí)在自己的屏幕上面textArea.append(time + 我對(duì) + to + 說:rn + info + rn);sendMessage(toMsg);textArea_1.setText(null);textArea_1.requestFocus(););/ 關(guān)閉按鈕btnNewButton.addActionListener(new ActionLis

16、tener() public void actionPerformed(ActionEvent e) if(isSendFile | isReceiveFile)JOptionPane.showMessageDialog(contentPane,正在傳輸文件中,您不能離開.,Error Message, JOptionPane.ERROR_MESSAGE);elsebtnNewButton.setEnabled(false);Message toMsg = new Message();toMsg.setType(-1);toMsg.setName(name);toMsg.setTimer(ge

17、tTimer();sendMessage(toMsg);b = false;);/ 離開this.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) / TODO Auto-generated method stubif(isSendFile | isReceiveFile)JOptionPane.showMessageDialog(contentPane,正在傳輸文件中,您不能離開.,Error Message, JOptionPane.ERROR_MESSAGE);elseint re

18、sult = JOptionPane.showConfirmDialog(getContentPane(),您確定要離開聊天室);if (result = 0) Message toMsg = new Message();toMsg.setType(-1);toMsg.setName(name);toMsg.setTimer(getTimer();sendMessage(toMsg);/CTerrupt();b = false;);/ 列表監(jiān)聽list.addMouseListener(new MouseAdapter() public void mouseClicked(M

19、ouseEvent e) List to = list.getSelectedValuesList();if (e.getClickCount() = 2) if (to.toString().contains(name+(我) JOptionPane.showMessageDialog (getContentPane(), 不能向自己發(fā)送文件);return;/ 雙擊打開文件文件選擇框FileChoose chooser = new FileChoose();chooser.setDialogTitle(選擇文件框); / 標(biāo)題哦.chooser.showDialog(getContentP

20、ane(), 選擇); / 這是按鈕的名字./ 判定是否選擇了文件if (chooser.getSelectedFile() != null) / 獲取路徑filePath = chooser.getSelectedFile().getPath();File file = new File(filePath);/ 文件為空if (file.length() = 0) JOptionPane.showMessageDialog (getContentPane(),filePath + 文件為空,不允許發(fā)送.);return;Message toMsg = new Message();toMsg.

21、setType(2);/ 請(qǐng)求發(fā)送文件toMsg.setSize(new Long(file.length().intValue();toMsg .setName(name);toMsg.setTimer(getTimer();toMsg.setFileName(file.getName(); / 記錄文件的名稱toMsg.setInfo(請(qǐng)求發(fā)送文件);/ 判斷要發(fā)送給誰HashSet set = new HashSet();set.addAll(list.getSelectedValuesList();toMsg.setClients(set);sendMessage(toMsg););五、實(shí)驗(yàn)數(shù)據(jù)、結(jié)果分析1. 開啟服務(wù)器服務(wù)器用來將用戶發(fā)送的信息發(fā)送到指定用戶,所以程序執(zhí)行之前服務(wù)器一定要開啟。如圖5.1所示。圖5.1開啟服務(wù)器2. 用戶登錄用戶可以通過輸入自己的賬號(hào)密碼來登錄聊天室,如圖5.2所示。圖5.2 登錄窗口3. 用戶注冊(cè)當(dāng)用戶第一次登錄時(shí),可以通過自己注冊(cè)一個(gè)賬號(hào)來進(jìn)入聊天室。如圖5.3所示。圖5.3 用戶注冊(cè)4. 多用戶登錄當(dāng)有用戶上線時(shí)服務(wù)器會(huì)向所有在線用戶發(fā)送用戶上線通知。如圖5.4、5.5所示。圖5.4 用戶上線5.5多用戶上線5. 聊天用

溫馨提示

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

評(píng)論

0/150

提交評(píng)論