![計算機網絡聊天室課程設計報告書_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/17/32d5ab27-d652-4606-a072-b236f9527e83/32d5ab27-d652-4606-a072-b236f9527e831.gif)
![計算機網絡聊天室課程設計報告書_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/17/32d5ab27-d652-4606-a072-b236f9527e83/32d5ab27-d652-4606-a072-b236f9527e832.gif)
![計算機網絡聊天室課程設計報告書_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/17/32d5ab27-d652-4606-a072-b236f9527e83/32d5ab27-d652-4606-a072-b236f9527e833.gif)
![計算機網絡聊天室課程設計報告書_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/17/32d5ab27-d652-4606-a072-b236f9527e83/32d5ab27-d652-4606-a072-b236f9527e834.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、下載可編輯計算機網絡課程設計報告設計題目:聊天室同組人:王巍瑾馬志超周旭同組人學號:201515151052015151510420151515138專業(yè)班級:計科 153指導教師:金松林日期:2017年 6 月 12 日16 日.專業(yè) .整理 .下載可編輯一、 題目意義和需求分析1. 題目意義即時通訊或在線聊天是目前Internet上最為流行的通訊方式,用戶之間通過文字傳輸信息。這是一種可以讓使用者在網絡上建立私人聊天室的實時通訊服務。除了簡單的文字信息,使用者之間還可以互相發(fā)送文件、文檔、音樂、視頻等文件。只要與服務器,無論對方在天涯海角,雙方隔得多遠都沒有問題。消息的實時更新,拉近了我們
2、相知的橋梁,文件的相互傳輸,使同事之間辦公更方便快捷。2. 需求分析a. 注冊當選擇注冊時,創(chuàng)建一個 File 文件類,載入“ user.txt ”,判斷用戶名是否已經存在,用戶名有效后寫入“user.txt”。b. 登錄去“user.txt ”讀取用戶數據,驗證用戶名是否存在,驗證用戶密碼是否正確,如果以上驗證全部正確,返回客戶端信息,提示登陸成功進入聊天界面。c. 聊天所有已登錄的用戶的名稱都會在列表中顯示, 然后就可以選擇其中一個或多個發(fā)起聊天。接收用戶聊天信息,當用戶發(fā)送聊天信息時,服務端將會收到客戶端用 Socket 傳輸過來的聊天信息對象,然后將其轉換為 Message對象,返回聊
3、天信息,然后系統(tǒng)從 Message中提取消息類型,再根據類型將消息轉化后通過 Socket 轉發(fā)到相應的用戶。d. 文件傳輸在聊天的基礎上增加了一個文件傳輸功能。同事之間辦公難免有一些資料的來往,在登錄列表中選擇一個用戶或多個用戶發(fā)送文件,等對方確認接收后即可建立連接進行文件傳輸。二、設計說明聊天室總體分為三個模塊,主要包括注冊登錄,聊天模塊,文件傳輸模塊。系統(tǒng)運行在 java 環(huán)境中,要求java 環(huán)境為 JDK 1.8+ ;設計中的重點是通過Java 中的 ServerSocket 搭建 TCP服務器,通過在客戶端創(chuàng)建Socket套接字連接服務器,然后通過ObjectOutputStrea
4、m來發(fā)送Message(數據消息的封裝類)對象讓服務器接受。通過線程來存儲來存儲用戶.專業(yè) .整理 .下載可編輯的 Socket 連接狀態(tài),接受并處理用戶發(fā)過來的信息,返回處理信息。客戶機也通過線程來接受服務器的處理數據做出響應。設計的難點是文件的傳輸,首先通過原有的服務器獲得目標客戶機的IP 地址和端口,然后在客戶機上建立服務器, 通過要發(fā)送的文件的客戶機連接接受文件的客戶機用 DataInputStream 和 DataOutputStream 來推送到輸入、輸出流。然后客戶機接受并保存。三、系統(tǒng)詳細設計1. 功能模塊聊天系統(tǒng)賬戶聊天跟向好登注好友友發(fā)錄冊聊送天文件2. 流程圖.專業(yè) .整
5、理 .下載可編輯開始N開啟服務器Y打開登陸窗口登陸注冊NY賬號密碼是否用戶是否已存在正確YN登陸成功注冊成功聊天窗口NN選擇一個或多雙擊個好友水深火熱的聊天選擇文件進行傳輸Y等待對方確認Y是否下線正在傳輸N傳輸完成Y結束.專業(yè) .整理 .下載可編輯四、程序源代碼及注釋public ChatRoom(String u_name, Socket client) / 賦值name = u_name;clientSocket = client;onlines = new Vector();setTitle(name);setResizable(false);setDefaultCloseOperati
6、on(JFrame.DO_NOTHING_ON_CLOSE);setBounds(200, 100, 688, 510);contentPane = new JPanel();setContentPane(contentPane);contentPane.setLayout(null);/ 聊天信息顯示區(qū)域JScrollPane scrollPane = new JScrollPane();scrollPane.setBounds(10, 10, 410, 300);getContentPane().add(scrollPane);textArea = new JTextArea();text
7、Area.setEditable(false);textArea.setLineWrap(true);/激活自動換行功能textArea.setWrapStyleWord(true);/ 激活斷行不斷字功能 textArea.setFont(new Font("sdf", Font.BOLD, 13); scrollPane.setViewportView(textArea);/ 打字區(qū)域JScrollPane scrollPane_1 = new JScrollPane();scrollPane_1.setBounds(10, 347, 411, 97);getConte
8、ntPane().add(scrollPane_1);final JTextArea textArea_1 = new JTextArea();textArea_1.setLineWrap(true);/激活自動換行功能textArea_1.setWrapStyleWord(true);/ 激活斷行不斷字功能 scrollPane_1.setViewportView(textArea_1);/關閉按鈕final JButton btnNewButton = new JButton("關閉 ");btnNewButton.setBounds(214, 448, 60, 30)
9、;getContentPane().add(btnNewButton);/發(fā)送按鈕JButton btnNewButton_1 = new JButton("發(fā)送 ");btnNewButton_1.setBounds(313, 448, 60, 30);getRootPane().setDefaultButton(btnNewButton_1);getContentPane().add(btnNewButton_1);/ 在線客戶列表listmodel = new UUListModel(onlines) ;list = new JList(listmodel);.專業(yè)
10、.整理 .下載可編輯list.setCellRenderer(new CellRenderer();list.setOpaque(false);Border etch = BorderFactory.createEtchedBorder(); list.setBorder(BorderFactory.createTitledBorder(etch,"<"+u_name+">"+" 在線 用 戶 :",TitledBorder.LEADING,TitledBorder.TOP,new Font("sdf"
11、, 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.setBounds(430,
12、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, 2
13、45, 15); getContentPane().add(lblNewLabel);try oos=newObjectOutputStream(clientSocket.getOutputStream();/ 記錄上線客戶的信息,并發(fā)送給服務器Message toMsg = new Message(); toMsg.setType(0); toMsg.setName(name); toMsg.setTimer(getTimer(); oos.writeObject(toMsg);oos.flush();/ 啟動客戶接收線程CThread = new ClientInputThread();C
14、Thread.start(); catch (IOException e) / TODO Auto-generated catch block e.printStackTrace();/ 發(fā)送按鈕btnNewButton_1.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) .專業(yè) .整理 .下載可編輯String info = textArea_1.getText();List to = list.getSelectedValuesList();if (to.size() <
15、; 1) JOptionPane.showMessageDialog(getContentPane(), "請選擇聊天對象");return;if (to.toString().contains(name+"(我 )") JOptionPane.showMessageDialog(getContentPane(), " 不能向自己發(fā)送信息 "); return;if (info.equals("") JOptionPane.showMessageDialog(getContentPane(), "不能發(fā)送
16、空信息");return;Message toMsg = new Message();toMsg.setType(1);toMsg.setName(name);String time = getTimer();toMsg.setTimer(time);toMsg.setInfo(info);HashSet set = new HashSet();set.addAll(to);toMsg.setClients(set);/ 自己發(fā)的容也要現實在自己的屏幕上面textArea.append(time+ " 我對 " + to + " 說 :rn"+
17、 info+ "rn");sendMessage(toMsg);textArea_1.setText(null);textArea_1.requestFocus(););/ 關閉按鈕btnNewButton.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) if(isSendFile | isReceiveFile) JOptionPane.showMessageDialog(contentPane," 正在傳輸文件中,您不能離開.",&qu
18、ot;ErrorMessage",.專業(yè) .整理 .下載可編輯JOptionPane.ERROR_MESSAGE);elsebtnNewButton.setEnabled(false);Message toMsg = new Message();toMsg.setType(-1);toMsg.setName(name);toMsg.setTimer(getTimer();sendMessage(toMsg);b = false;);/ 離開this.addWindowListener(new WindowAdapter() public void windowClosing(Wind
19、owEvent e) / TODO Auto-generated method stubif(isSendFile | isReceiveFile)JOptionPane.showMessageDialog(contentPane," 正在傳輸文件中,您不能離開.","ErrorMessage",JOptionPane.ERROR_MESSAGE);elseint result = JOptionPane.showConfirmDialog(getContentPane()," 您確定要離開聊天室 ");if (result = 0)
20、 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(MouseEvent e) List to = list.getSelectedValuesList();if (e.getClickCount() = 2)
21、if (to.toString().contains(name+"(我 )") JOptionPane.showMessageDialog.專業(yè) .整理 .下載可編輯(getContentPane(), "不能向自己發(fā)送文件 ");return;/ 雙擊打開文件文件選擇框FileChoose chooser = new FileChoose();chooser.setDialogTitle("選擇文件框 "); /標題哦 .chooser.showDialog(getContentPane(), "選擇 ");/
22、這是按鈕的名字 ./ 判定是否選擇了文件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.s
23、etType(2);/請求發(fā)送文件toMsg.setSize(newLong(file.length().intValue();toMsg .setName(name);toMsg.setTimer(getTimer();toMsg.setFileName(file.getName();/記錄文件的名稱toMsg.setInfo("請求發(fā)送文件 ");/ 判斷要發(fā)送給誰HashSet<String>set=newHashSet<String>();set.addAll(list.getSelectedValuesList();toMsg.setCli
24、ents(set);sendMessage(toMsg););五、實驗數據、結果分析.專業(yè) .整理 .下載可編輯1. 開啟服務器服務器用來將用戶發(fā)送的信息發(fā)送到指定用戶,所以程序執(zhí)行之前服務器一定要開啟。如圖 5.1 所示。圖 5.1 開啟服務器2. 用戶登錄用戶可以通過輸入自己的賬號密碼來登錄聊天室,如圖5.2 所示。圖 5.2登錄窗口3. 用戶注冊當用戶第一次登錄時,可以通過自己注冊一個賬號來進入聊天室。如圖 5.3 所示。.專業(yè) .整理 .下載可編輯圖 5.3用戶注冊4. 多用戶登錄當有用戶上線時服務器會向所有在線用戶發(fā)送用戶上線通知。 如圖 5.4 、5.5所示。圖 5.4用戶上線.專業(yè) .整理 .下載可編輯5.5 多用戶
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年秋八年級歷史上冊 第五單元 從國共合作到國共對峙 第17課 中國工農紅軍長征說課稿 新人教版
- 12古詩三首 題臨安邸 說課稿-2024-2025學年語文五年級上冊統(tǒng)編版
- 2023七年級英語下冊 Module 3 Making plans Unit 2 We're going to cheer the players第4課時說課稿 (新版)外研版
- 18《童年的水墨畫》(說課稿)2023-2024學年統(tǒng)編版語文三年級下冊
- 10我們不亂扔 說課稿-2024-2025學年道德與法治二年級上冊統(tǒng)編版001
- 2025個人果樹承包租賃合同范本提供3篇
- 計算機系統(tǒng)配套零、部件項目融資渠道探索
- 水景噴泉照明設計合同(2篇)
- 法院離婚協議書(2篇)
- 2024-2025年高中語文 第1單元 2 北大是我美麗羞澀的夢說課稿 粵教版必修1
- 2025年度新能源汽車充電站運營權轉讓合同樣本4篇
- 第5課 隋唐時期的民族交往與交融 課件(23張) 2024-2025學年統(tǒng)編版七年級歷史下冊
- 2024年全國職業(yè)院校技能大賽高職組(生產事故應急救援賽項)考試題庫(含答案)
- 2024年江蘇農牧科技職業(yè)學院高職單招語文歷年參考題庫含答案解析
- 廣聯達智慧工地合同范例
- 文明施工考核標準
- 《霧都孤兒人物分析4000字(論文)》
- MZ/T 039-2013老年人能力評估
- GB/T 6329-1996膠粘劑對接接頭拉伸強度的測定
- 2023年遼寧鐵道職業(yè)技術學院高職單招(語文)試題庫含答案解析
- 2022年中國電信維護崗位認證動力專業(yè)考試題庫大全-下(判斷、填空、簡答題)
評論
0/150
提交評論