計(jì)算機(jī)網(wǎng)絡(luò)聊天室課程設(shè)計(jì)報(bào)告書_第1頁
計(jì)算機(jī)網(wǎng)絡(luò)聊天室課程設(shè)計(jì)報(bào)告書_第2頁
計(jì)算機(jī)網(wǎng)絡(luò)聊天室課程設(shè)計(jì)報(bào)告書_第3頁
計(jì)算機(jī)網(wǎng)絡(luò)聊天室課程設(shè)計(jì)報(bào)告書_第4頁
已閱讀5頁,還剩11頁未讀 繼續(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):201515151052015151510420151515138專業(yè)班級(jí):計(jì)科 153指導(dǎo)教師:金松林日期:2017年 6 月 12 日16 日.專業(yè) .整理 .下載可編輯一、 題目意義和需求分析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ì)象,返回聊

3、天信息,然后系統(tǒng)從 Message中提取消息類型,再根據(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ù)器,然后通過ObjectOutputStrea

4、m來發(fā)送Message(數(shù)據(jù)消息的封裝類)對(duì)象讓服務(wù)器接受。通過線程來存儲(chǔ)來存儲(chǔ)用戶.專業(yè) .整理 .下載可編輯的 Socket 連接狀態(tài),接受并處理用戶發(fā)過來的信息,返回處理信息??蛻魴C(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. 功能模塊聊天系統(tǒng)賬戶聊天跟向好登注好友友發(fā)錄冊(cè)聊送天文件2. 流程圖.專業(yè) .整

5、理 .下載可編輯開始N開啟服務(wù)器Y打開登陸窗口登陸注冊(cè)NY賬號(hào)密碼是否用戶是否已存在正確YN登陸成功注冊(cè)成功聊天窗口NN選擇一個(gè)或多雙擊個(gè)好友水深火熱的聊天選擇文件進(jìn)行傳輸Y等待對(duì)方確認(rèn)Y是否下線正在傳輸N傳輸完成Y結(jié)束.專業(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);/激活自動(dòng)換行功能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);/激活自動(dòng)換行功能textArea_1.setWrapStyleWord(true);/ 激活斷行不斷字功能 scrollPane_1.setViewportView(textArea_1);/關(guān)閉按鈕final JButton btnNewButton = new JButton("關(guān)閉 ");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ā)送給服務(wù)器Message toMsg = new Message(); toMsg.setType(0); toMsg.setName(name); toMsg.setTimer(getTimer(); oos.writeObject(toMsg);oos.flush();/ 啟動(dòng)客戶接收線程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(), "請(qǐng)選擇聊天對(duì)象");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ā)的容也要現(xiàn)實(shí)在自己的屏幕上面textArea.append(time+ " 我對(duì) " + to + " 說 :rn"+

17、 info+ "rn");sendMessage(toMsg);textArea_1.setText(null);textArea_1.requestFocus(););/ 關(guān)閉按鈕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("選擇文件框 "); /標(biāo)題哦 .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);/請(qǐng)求發(fā)送文件toMsg.setSize(newLong(file.length().intValue();toMsg .setName(name);toMsg.setTimer(getTimer();toMsg.setFileName(file.getName();/記錄文件的名稱toMsg.setInfo("請(qǐng)求發(fā)送文件 ");/ 判斷要發(fā)送給誰HashSet<String>set=newHashSet<String>();set.addAll(list.getSelectedValuesList();toMsg.setCli

24、ents(set);sendMessage(toMsg););五、實(shí)驗(yàn)數(shù)據(jù)、結(jié)果分析.專業(yè) .整理 .下載可編輯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 所示。.專業(yè) .整理 .下載可編輯圖 5.3用戶注冊(cè)4. 多用戶登錄當(dāng)有用戶上線時(shí)服務(wù)器會(huì)向所有在線用戶發(fā)送用戶上線通知。 如圖 5.4 、5.5所示。圖 5.4用戶上線.專業(yè) .整理 .下載可編輯5.5 多用戶

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論