版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、計算機網(wǎng)絡(luò)課程設(shè)計任務(wù)書 學(xué) 院計算機與信息工程學(xué)院專 業(yè)網(wǎng)絡(luò)工程課程名稱計算機網(wǎng)絡(luò)題 目基于C/S模式的簡單聊天程序完成期限自2016年6月13日至2016年6月26日共兩周內(nèi)容及任務(wù)一、項目的目的利用socket。實現(xiàn)客戶與服務(wù)器間的信息互通。二、項目任務(wù)的主要內(nèi)容和要求(1)用戶聊天室具有群發(fā),私聊,輸入昵稱與端口號等基本設(shè)置。點擊“連接”按鈕實現(xiàn)與服務(wù)器的連接。點擊“斷開”按鈕實現(xiàn)與服務(wù)器的斷開連接。(2)服務(wù)器聊天室具有啟動服務(wù)器,停止服務(wù)器,顯示當(dāng)前在線的用戶功能。點擊“啟動”按鈕實現(xiàn)與服務(wù)器的連接。點擊“停止”按鈕實現(xiàn)與服務(wù)器的斷開連接。(3)設(shè)計一個登錄程序。驗證通過后才能進入
2、聊天室。(4)當(dāng)服務(wù)器與客戶機連接成功后。能夠互相接受和發(fā)送消息。當(dāng)多個客戶機啟動時,服務(wù)器會創(chuàng)建子線程處理對應(yīng)線程的消息。三、項目設(shè)計(研究)思路(1)設(shè)計步驟:先畫出聊天室的模型,布局。(2)設(shè)計要點:設(shè)計主類與子類,分別實現(xiàn)不同的功能(3)主要技術(shù)分析:需要掌握socket通信,swing和awt,io的簡單應(yīng)用.(4)解決思路:先按照草稿圖設(shè)計出聊天室布局。再寫各個類的功能。簡單測試與修改代碼。最后完善。四、具體成果形式和要求(見第一部分)進度安排起止日期工作內(nèi)容6.13-6.18設(shè)計聊天室的模型,布局6.19-6.20編寫代碼,初步實現(xiàn)聊天程序6.21-6.26完善代碼,優(yōu)化界面,完
3、成任務(wù)主要參考資料1趙生慧.Java面向?qū)ο蟪绦蛟O(shè)計(第二版)M.北京:中國水利水電出版社,2013.2萬常選.數(shù)據(jù)庫系統(tǒng)原理與設(shè)計(第二版)M.北京:清華大學(xué)出版社,2012.3謝鈞,謝希仁.計算機網(wǎng)絡(luò)教程(第四版)M.北京:人民郵電出版社,2014.4李剛.瘋狂JAVA講義M.(第三版).北京:電子工業(yè)出版社,2014. 5耿祥義、張躍平.Java2實用教程M.(第三版).北京:清華大學(xué)出版社, 2006. 6劉海杰.Java編程設(shè)計M.北京:中國鐵道出版社,2006.指導(dǎo)教師意見(簽字): 年 月 日系(教研室)主任意見(簽字): 年 月 日基于C/S模式的簡單聊天程序設(shè)計說明書 學(xué)院名
4、稱: 計算機與信息工程學(xué)院 班級名稱: 網(wǎng)絡(luò)工程142 學(xué)生姓名: 張 三 學(xué) 號: 2014211540 題 目: 基于C/S模式的簡單聊天程序 指導(dǎo)教師 姓 名: 陳 海 寶 起止日期: 2016.6.13-2016.6.26 目錄一、選題背景1二、方案論證1三、過程論述23.1 服務(wù)器端23.2 客戶機端8四、結(jié)果分析15五、結(jié)論17第一部分:正文部分一、選題背景使用Socket實現(xiàn)網(wǎng)上聊天功能。用戶可以通過客戶端連接到服務(wù)器端并進行網(wǎng)上聊天。聊天時可以啟動多個客戶端。服務(wù)器端啟動后,接收客戶端發(fā)來的用戶名和密碼驗證信息。驗證通過則以當(dāng)前的聊天客戶列表信息進行響應(yīng);此后接收客戶端發(fā)來的聊
5、天信息,轉(zhuǎn)發(fā)給客戶端指定的聊天客戶(即私聊)或所有其他客戶端;在客戶斷開連接后公告其退出聊天系統(tǒng)的信息??蛻舳藛雍笤贕UI界面接收用戶輸入的服務(wù)器端信息、賬號和密碼等驗證客戶的身份。驗證通過則顯示當(dāng)前系統(tǒng)在線客戶列表??蛻艨梢耘c指定對象進行私聊,也可以向系統(tǒng)中所有在線客戶發(fā)送信息。二、方案論證基于C/S的簡單聊天室可以實現(xiàn)用戶與服務(wù)器間,服務(wù)器與多個用戶間的通信。聊天室程序通常需要完成以下一些基本功能:(1)登錄聊天室;(2)啟動服務(wù)器;(3)關(guān)閉服務(wù)器;(4)用戶之間的聊天;(5)退出聊天室。本系統(tǒng)其體功能需求如下:(1)聊天室管理員經(jīng)登錄界面登錄到管理界面,即系統(tǒng)的服務(wù)器端。用戶經(jīng)登錄界
6、面進入聊天大廳。 (2)不論是管理員還是用戶都需要在登錄界面輸入正確的用戶名和密碼后才可以登錄到各自的界面中去。 (3)系統(tǒng)的兩個主要界面都是為方便管理員和用戶操作的。首先,管理員進入到管理界面后可以方便的啟動/停止服務(wù)器,看到在線用戶的信息和聊天信息。用戶進入到聊天大廳中可以聊天,查看服務(wù)器狀態(tài)。 (4) 一個用戶退出聊天室對其他用戶不能產(chǎn)生影響,而服務(wù)器斷開與客戶端的連接則所有的用戶都失去與服務(wù)器的連接。(5)用戶的聊天信息錄入,重寫,發(fā)送,接收方便,快捷。(6)服務(wù)器狀態(tài),聊天信息和在線用戶人數(shù)及時刷新。(7)聊天室系統(tǒng)運行穩(wěn)定、安全性高、三、過程論述3.1 服務(wù)器端(1)首先實現(xiàn)的是服
7、務(wù)器開始工作界面,如圖3-1所示:圖3-1 代碼如下:public ChatServer() try System.out.println(服務(wù)器開始工作.); server=new ServerSocket(port);/初始化服務(wù)器套接字 while (true) socket=server.accept();/等待連接 System.out.println(socket.getInetAddress()+連接n);/得到客戶機地址 Client client=new Client(socket);/實例化一個客戶線程(其中線程Client中Socket,這里的Socket只是起個過渡作用
8、) clients.add(client);/增加客戶線程到向量中 client.start();/啟動線程 notifyChatRoom();/監(jiān)視聊天室連接變化 catch(Exception ex) ex.printStackTrace(); (2)監(jiān)視聊天室連接情況,并顯示出來,如圖3-2所示:圖3-2代碼如下:public static void notifyChatRoom() StringBuffer newUser=new StringBuffer(newUser); for(int i =0;iclients.size();i+) Client c=(Client)clien
9、ts.elementAt(i); newUser.append(:+); sendClients(newUser); public static void sendClients(StringBuffer message) for(int i =0;i0) Client client=(Client)clients.firstElement(); try client.socket.close(); catch(IOException e) e.printStackTrace(); clients.removeElement(client); /移出客戶端 public stati
10、c void disconnect(Client c) / 斷開客戶端 try System.err.println(c.ip+斷開連接n); catch (Exception ex) ex.printStackTrace(); clients.removeElement(c); c.socket = null; (3)再次是實現(xiàn)服務(wù)器與客戶機連接機制,如果有客戶機申請連接,則為此客戶機創(chuàng)建線程,代碼如下:public ChatServer() try System.out.println(服務(wù)器開始工作.); server=new ServerSocket(port);/初始化服務(wù)器套接字
11、while (true) socket=server.accept();/等待連接 System.out.println(socket.getInetAddress()+連接n);/得到客戶機地址 Client client=new Client(socket);/實例化一個客戶線程(其中線程Client中Socket,這里的Socket只是起個過渡作用) clients.add(client);/增加客戶線程到向量中 client.start();/啟動線程 notifyChatRoom();/監(jiān)視聊天室連接變化 catch(Exception ex) ex.printStackTrace(
12、); public ChatServer() try System.out.println(服務(wù)器開始工作.); server=new ServerSocket(port);/初始化服務(wù)器套接字 while (true) socket=server.accept();/等待連接 System.out.println(socket.getInetAddress()+連接n);/得到客戶機地址 Client client=new Client(socket);/實例化一個客戶線程(其中線程Client中Socket,這里的Socket只是起個過渡作用) clients.add(client);/增
13、加客戶線程到向量中 client.start();/啟動線程 notifyChatRoom();/監(jiān)視聊天室連接變化 catch(Exception ex) ex.printStackTrace(); (4)再次是實現(xiàn)服務(wù)器的消息發(fā)送和接受的處理機制,如圖3-3所示:圖3-3代碼如下:public Client(Socket s) socket = s; try reader = new BufferedReader(new InputStreamReader(s.getInputStream();/得到輸入流 ps = new PrintStream(s.getOutputStream();
14、/到輸出流 String info = reader.readLine();/讀取接收到的信息 StringTokenizer stinfo = new StringTokenizer(info,:); /分解字符串 String head = stinfo.nextToken(); /獲取關(guān)鍵字 System.out.println(stinfo.toString(); System.out.println(head); if (stinfo.hasMoreTokens() name = stinfo.nextToken(); /獲取用戶名 if (stinfo.hasMoreTokens(
15、) ip = stinfo.nextToken(); /獲取IP地址 catch (IOException ex) ex.printStackTrace(); System.out.println(name); System.out.println(ip); public void send (StringBuffer msg) ps.println(msg); /輸出信息 ps.flush(); public void run() while (true) String line = null; try line = reader.readLine(); System.out.println
16、(line:+line); catch (IOException ex) ex.printStackTrace(); /輸出錯誤信息 ChatServer.disconnect(this);/斷開連接 ChatServer.notifyChatRoom();/更新信息 if (line = null) /客戶離開 ChatServer.disconnect(this); ChatServer.notifyChatRoom(); StringTokenizer st = new StringTokenizer(line,:);/分解字符串 String keyword = st.nextToke
17、n(); if (keyword.equals(MSG) /發(fā)送來的聊天信息 StringBuffer msg = new StringBuffer(MSG:); msg.append(name); /在信息上增加用戶名 msg.append(st.nextToken(0n); ChatServer.sendClients(msg);/發(fā)送聊天語句到各個客戶端 System.out.println(msg); else if (keyword.equals(quit) /退出命令 ChatServer.disconnect(this); /斷開連接 ChatServer.notifyChatR
18、oom(); /刷新信息 3.2 客戶機端(1)客戶機登錄界面如圖3-4所示:圖3-4代碼如下:public class ChatClient extends JFrame implements ActionListener TextField tfName = new TextField();/姓名輸入文本域 Button btConnect = new Button(登陸);/連接按鈕 Button btDisconnect = new Button(退出);/斷開連接按鈕 TextArea tfChat = new TextArea();/顯示聊天信息文本域 Button btSend
19、= new Button(發(fā)送); TextField tfMessage = new TextField();/聊天輸入 java.awt.List list1 = new java.awt.List(9);/顯示在線用戶信息 Socket socket = null;/連接端口 PrintStream ps = null;/輸出流 Listen listen = null; /監(jiān)聽線程類 class Listen extends Thread BufferedReader reader; PrintStream ps; String cname; Socket socket; ChatCl
20、ient chatClient; public Listen(ChatClient client,String name,Socket socket) try this.chatClient = client; this.socket = socket; ame = name; reader = new BufferedReader(new InputStreamReader(socket.getInputStream(); ps = new PrintStream(socket.getOutputStream(); catch (IOException e) e.printSt
21、ackTrace(); public void run() while (true) String line=null; try line = reader.readLine(); /讀取數(shù)據(jù)流 System.out.println(客戶端:+line); catch (IOException ex) ex.printStackTrace(); ps.println(quit); /斷開連接 return; StringTokenizer stinfo = new StringTokenizer(line,:); /分解字符串 String keyword = stinfo.nextToken
22、(); if (keyword.equals(MSG) chatClient.tfChat.append(line+n); else if (keyword.equals(newUser) chatClient.list1.clear(); chatClient.list1.add(users, 0); int i = 1; while (stinfo.hasMoreTokens() chatClient.list1.add(stinfo.nextToken(), i+); public ChatClient(Socket socket) this.setLayout(new BorderLa
23、yout(); JPanel panel1 = new JPanel(); Label label = new Label(賬號); panel1.setBackground(Color.pink); panel1.add(label); panel1.add(tfName); panel1.add(btConnect); panel1.add(btDisconnect); this.add(panel1,BorderLayout.SOUTH); JPanel panel2 = new JPanel(); tfChat.setBackground(Color.yellow); panel2.a
24、dd(tfChat); panel2.add(list1); this.add(panel2,BorderLayout.CENTER); JPanel panel3 = new JPanel(); Label label2 = new Label(聊天板); panel3.add(label2); panel3.add(tfMessage); panel3.add(btSend); this.add(panel3,BorderLayout.NORTH); this.setBounds(50,50,400,350); this.setVisible(true); btConnect.addAct
25、ionListener(this); btDisconnect.addActionListener(this); btSend.addActionListener(this); (2)其次是實現(xiàn)消息的接受和發(fā)送處理機制,代碼如下:public void run() while (true) String line=null; try line = reader.readLine(); /讀取數(shù)據(jù)流 System.out.println(客戶端:+line); catch (IOException ex) ex.printStackTrace(); ps.println(quit); /斷開連接
26、 return; StringTokenizer stinfo = new StringTokenizer(line,:); /分解字符串 String keyword = stinfo.nextToken(); if (keyword.equals(MSG) chatClient.tfChat.append(line+n); else if (keyword.equals(newUser) chatClient.list1.clear(); chatClient.list1.add(users, 0); int i = 1; while (stinfo.hasMoreTokens() cha
27、tClient.list1.add(stinfo.nextToken(), i+); (3)再次是實現(xiàn)客戶端登陸界面以及功能的實現(xiàn),如圖3-5所示:圖3-5代碼如下: public class ChatClient extends JFrame implements ActionListener TextField tfName = new TextField();/姓名輸入文本域 Button btConnect = new Button(登陸);/連接按鈕 Button btDisconnect = new Button(退出);/斷開連接按鈕 TextArea tfChat = new
28、TextArea();/顯示聊天信息文本域 Button btSend = new Button(發(fā)送); TextField tfMessage = new TextField();/聊天輸入 java.awt.List list1 = new java.awt.List(9);/顯示在線用戶信息 Socket socket = null;/連接端口 PrintStream ps = null;/輸出流 Listen listen = null; /監(jiān)聽線程類 class Listen extends Thread BufferedReader reader; PrintStream ps;
29、 String cname; Socket socket; ChatClient chatClient; public Listen(ChatClient client,String name,Socket socket) try this.chatClient = client; this.socket = socket; ame = name; reader = new BufferedReader(new InputStreamReader(socket.getInputStream(); ps = new PrintStream(socket.getOutputStrea
30、m(); catch (IOException e) e.printStackTrace(); public void run() while (true) String line=null; try line = reader.readLine(); /讀取數(shù)據(jù)流 System.out.println(客戶端:+line); catch (IOException ex) ex.printStackTrace(); ps.println(quit); /斷開連接 return; StringTokenizer stinfo = new StringTokenizer(line,:); /分解字符串 String keyword = stinfo.nextToken(); if (keyword.equals(MSG) chatClient.tfChat.append(line+n); else if (keyword.equals(newUser) chatClient.list1.clear
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東省清遠(yuǎn)市2022-2023學(xué)年高三上學(xué)期期末教學(xué)質(zhì)量檢測英語試題
- 旅行社后勤管理工作概述
- 健身行業(yè)教練技能提升總結(jié)
- 餐飲行業(yè)市場推廣總結(jié)
- 服裝行業(yè)設(shè)計師工作經(jīng)驗分享
- 皮革行業(yè)助理的工作概括
- 兒童用品行業(yè)營業(yè)員工作總結(jié)
- 證券公司前臺工作總結(jié)
- 銀行業(yè)務(wù)培訓(xùn)總結(jié)
- 《漫話探險》課件
- RTO工藝流程簡介
- 語文新課標(biāo)背景下單元整體教學(xué):六下第4單元大單元設(shè)計
- 最高人民法院民事審判第一庭裁判觀點侵權(quán)責(zé)任卷
- 提高自我意識的方法
- 長租公寓課件
- 《康復(fù)護理專科》課件
- 2024年度醫(yī)院肝膽胰脾外科帶教計劃課件
- 品質(zhì)部規(guī)劃方案
- JGJT157-2014 建筑輕質(zhì)條板隔墻技術(shù)規(guī)程
- 2023-2024學(xué)年福建省泉州市惠安縣八年級(上)學(xué)期期末數(shù)學(xué)試題(含解析)
- 喬木移栽、栽植施工技術(shù)方案及方法
評論
0/150
提交評論