網絡編程課程設計報告書_第1頁
網絡編程課程設計報告書_第2頁
網絡編程課程設計報告書_第3頁
網絡編程課程設計報告書_第4頁
網絡編程課程設計報告書_第5頁
已閱讀5頁,還剩6頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

.../課程設計說明書課程名稱:Windows網絡編程設計題目:基于JAVA網絡聊天室設計學院:計算機科學與信息工程學院專業班級:網絡工程12級指導教師:小組成員:2015年6月目錄摘要1引言:11.需求分析11.1需求分析11.2系統簡介22.系統開發技術22.1JAVA網絡編程技術22.2Socket套接字32.3TCP三次握手33.系統總框圖與功能分析43.1系統總框圖43.2系統功能模塊分析54.系統模塊代碼設計與分析64.1系統流程分析64.2類的設計與分析74.3客戶端模塊部分代碼74.4服務器端模塊部分代碼:95.系統測試116.總結137.成員分工13參考文獻:14網絡聊天室摘要:隨著我國經濟發展和網絡的普及,網絡技術也越來越多地被應用于日常工作之中。在程序設計領域,面向對象的編程技術正在逐步代替面向過程的程序設計技術,成為計算機應用設計開發的主流,對于人與人之間通過網絡的溝通和交流,聊天室是人們最常見、最直接的交流的方式。本聊天系統以聊天交流為主,為廣大用戶提供一個借助網絡進行人際交往的平臺,也是網絡與現實最貼近的實用型應用。本文所介紹的網絡聊天系統是基于JAVA應用程序開發設計的,其主要特性是簡單、面向對象、分布式、解釋執行、安全、體系結構中立、可移植、高性能、多線程以及動態性。關鍵詞:局域網、聊天室、JAVA、Socket、WindowsSocket引言:目前,基于TCP/IP協議的網絡得到了普及和飛速的發展,Windows下的網絡程序越來越顯得重要。利用TCP/IP協議提供的編程接口———Socket<套接字>可以開發出TCP/IP應用程序。正確的使用WindowsSocket,就可使得不同地址下的進程得以在Windows環境下順利進行各種網絡通信,因此研究WinSock更有意義。而基于TCP/IP協議網絡環境下的應用程序是通過客戶機/服務器<C/S>作用方式模式在網絡<應用>編程界面實現的。本次實驗采用java語言設計一個基于C/S模式的TCP網絡通訊程序。實現客戶端與服務器端之間的數據傳輸。1.需求分析1.1需求分析根據當前網絡的需求,網絡聊天越來越受到各種網民所青睞。因此開發網絡聊天是相當有必要,而且在網站內增加聊天功能,它不僅可以提高網站的訪問量,同時可以留著訪客,更重要的是讓訪客透過聊天室實時的互相交流。而小組成員也都學習過JAVA語言,對網絡編程也較有興趣,為了更好的考驗自己對JAVA語言的掌握程度,小組成員一致決定以《基于JAVA的網絡聊天室》為課程設計,希望通過這一次能進一步提高我們的網絡開發編程的能力。1.2系統簡介聊天系統不外乎兩個方面,服務器端和客戶端。這里簡要分析一下兩個方面所要完成的任務:服務器端的任務:1、服務器端應當建立一個ServerSocket,并且不斷進行偵聽是否有客戶端連接或者斷開連接。

2、服務器端應當是一個信息發送中心,所有客戶端的信息都傳到服務器端,由服務器端根據要求分發信息。客戶端的任務:1、與服務器端建立通信通道,向服務器端發送信息。

2、接收來自服務器的信息。系統開發技術2.1JAVA網絡編程技術JAVA豐富的類庫提供了大量的類以滿足網絡化、多線程、面向對象系統的需要。語言包提供的支持包括字符串處理、多線程處理、數學函數處理等,可以用它簡單地實現JAVA程序的運行平臺。實用程序包提供的支持包括哈希表、堆棧、可變數組、時間和日期等。輸入輸出包用統一的"流"模型來實現所有格式的I/O,包括文件系統、網絡、輸入低級網絡包用于實現Socket編程。抽象圖形用戶接口包實現了不同平臺的計算機的圖形用戶接口部件,包括窗口、菜單、滾動條、對話框等,使得JAVA可以移植到不同平臺的機器。網絡包支持Internet的TCP/IP協議,提供了與Internet的接口。它支持URL連接,WWW的即時訪問,并且簡化了用戶/服務器模型的程序設計。2.2Socket套接字Socket,簡稱套接字,用于實現網絡上客戶和服務器之間的連接。具體的說:一個服務器應用程序一般偵聽一個特定的端口等待客戶端的連接請求,當一個連接請求到達時,客戶端和服武器端建立一個通信連接,在連接過程中,客戶端被分配一個本地端口與一個Socket建立連接,客戶端通過寫Socket來通知服務器,以讀Socket中的信息,類似的服務器也獲得一個本地端口,它需要一個新的端口號來偵聽原始端口上的其他連接請求。服務器也通過它的本地端口連接一個Socket,通過讀寫和客戶端通信。Socket程序的工作過程:1.建立Socket連接:在通信開始之前由通信雙方確認身份,建立一條專用的虛擬連接道。2.數據通信:利用虛擬連接通道傳送數據信息進行通信。3.關閉:通信結束時,再將所建的虛擬連接拆除。具體如下:1服務器serversocket1服務器serversocket2監聽4.連接5讀6寫7關閉3客戶端socket6讀5寫7關閉圖1Socket套接字的建立與連接2.3TCP三次握手第一次握手:原主機發送一個帶有本次連接的序號的請求的一個數據幀第二次握手:目的主機收到請求后,如果同意連接,則發回一個帶有一個本次連接序號和源端機連接序列號的確認。第三此握手:源端機收到含有兩次初始序列號的應答后,再向目的主機發送一個帶有兩次連接的序列號的確認。系統總框圖與功能分析3.1系統總框圖圖2聊天系統框架圖3.2系統功能模塊分析圖3系統功能圖客戶端:啟動連接:默認連接IP為,端口為1228。聊天:用戶可以給所有人發送信息,并能看到其他用戶發送給自己或所有人的消息。斷開連接:與服務器斷開連接,無法發送與接收信息。服務器端:啟動服務:綁定套接字,處于等待連接的狀態,實時監控網絡狀態。偵聽客戶端:服務器端套接字一旦監聽到客戶端套接字的連接請求,它就響應客戶端套接字的請求,一旦客戶端確認了此描述,連接就建立好了。而服務器端套接字繼續處于監聽狀態,繼續接收其他客戶端套接字的連接請求斷開連接:與客戶端斷開連接,無法偵聽連接客戶端。系統模塊代碼設計與分析4.1系統流程分析客戶端:用服務器的IP地址和端口號實例化Socket對象。調用connect方法,連接到服務器上。將發送到服務器的IO流填充到IO對象里,比如BufferedReader/PrintWriter。利用Socket提供的getInputStream和getOutputStream方法,通過IO流對象,向服務器發送數據流。通訊完成后,關閉打開的IO對象和Socket。服務器端:在服務器,用一個端口來實例化一個ServerSocket對象。此時,服務器就可以這個端口時刻監聽從客戶端發來的連接請求。調用ServerSocket的accept方法,開始監聽連接從端口上發來的連接請求。利用accept方法返回的客戶端的Socket對象,進行讀寫IO的操作。通訊完成后,關閉打開的流和Socket對象4.2類的設計與分析ServerUI類:服務器端界面類,主要負責服務器端的界面設計Server類:此類負責創建綁定到指定服務器端口號的套接字,等待客戶端連接ListenerClient類:此類負責偵聽客戶端發送信息并將信息廣播出去ClientUI類:客戶端界面類,主要負責客戶端的界面設計ClientThread類:此類創建連接到服務器端的套接字,讀取輸入內容并發送4.3客戶端模塊部分代碼客戶端界面部分:publicClientUI<>{super<"客戶端">;//創建ClientUI類的對象btStart=newJButton<"啟動連接">;//啟動連接按鈕btSend=newJButton<"發送信息">;//發送信息按鈕tfSend=newJTextField<10>;//構造一個列數為10的空TextFieldtfIP=newJTextField<10>;tfPost=newJTextField<5>;taShow=newJTextArea<>;//創建一個空的文本區域/*創建"啟動連接"按鈕的監聽器對象,監聽按鈕發生的動作;*如果"啟動連接"按鈕被按下,則將創建的ClientUI的對象作為參數傳遞給ClientThread類**/btStart.addActionListener<newActionListener<>{publicvoidactionPerformed<ActionEvente>{//構造匿名內部類來實現接口ActionListenerserver=newClientThread<ClientUI.this>;}}>;/*創建"發送信息"按鈕的監聽器對象,監聽按鈕發生的動作;*如果"發送信息"按鈕被按下,則將獲取用戶輸入到文本框內的內容**/btSend.addActionListener<newActionListener<>{publicvoidactionPerformed<ActionEvente>{server.sendMsg<tfSend.getText<>>;tfSend.setText<"">;//設置文本框默認內容為空字符串}}>;/*創建窗口監聽器,監聽窗口的動作*如果窗口被關閉,則會彈出"確定關閉嗎"的溫馨提示窗口,以便用戶選擇*如果用戶選擇"是",則關閉窗口**/this.addWindowListener<newWindowAdapter<>{publicvoidwindowClosing<WindowEvente>{inta=JOptionPane.showConfirmDialog<null,"確定關閉嗎?","溫馨提示",JOptionPane.YES_NO_OPTION>;if<a==1>{System.exit<0>;//關閉}}}>;客戶端連接部分:publicClientThread<ClientUIui>{//ClientThread類構造函數,接收客戶端的界面對象this.ui=ui;try{client=newSocket<"",1228>;//這里設置連接服務器端的IP的端口println<"連接服務器成功:端口1228">;reader=newBufferedReader<newInputStreamReader<client.getInputStream<>>>;//構造客戶端輸入流并將字節轉換為字符writer=newPrintWriter<client.getOutputStream<>,true>;//如果為true,則println、printf或format方法將刷新輸出緩沖區}catch<IOExceptione>{println<"連接服務器失敗:端口1228">;println<e.toString<>>;e.printStackTrace<>;}this.start<>;//啟動客戶端線程}4.4服務器端模塊部分代碼:服務器端啟動部分:publicvoidrun<>{//線程開啟后,執行以下操作try{ss=newServerSocket<1228>;//創建綁定到端口號為1228的服務器套接字對象ui.clients=newArrayList<Socket><>;//構造一個包含指定端口號的連接客戶端的列表,啟動服務器println<"啟動服務器成功:端口1228">;while<true>{//如果服務器啟動成功,執行以下操作println<"等待客戶端">;Socketclient=ss.accept<>;//創建套接字對象,偵聽并接受到此套接字的連接,在連接傳入之前一直阻塞ui.clients.add<client>;//如果與客戶端套接字連接成功,則將此客戶端套接字添加到列表中println<"連接成功"+client.toString<>>;//將客戶端套接字轉換為字符串輸出newListenerClient<ui,client>;//創建服務器端與客戶端的監聽器}}catch<IOExceptione>{//如果服務器啟動失敗,輸出相應信息println<"啟動服務器失敗:端口1228">;println<e.toString<>>;e.printStackTrace<>;}}服務器端偵聽部分:publicvoidrun<>{Stringmsg="";while<true>{try{reader=newBufferedReader<newInputStreamReader<client.getInputStream<>>>;writer=newPrintWriter<client.getOutputStream<>,true>;msg=reader.readLine<>;sendMsg<msg>;}catch<IOExceptione>{println<e.toString<>>;//e.printStackTrace<>;break;}if<msg!=null&&msg.trim<>!="">{println<">>"+msg>;}}}//把信息廣播到所有用戶publicsynchronizedvoidsendMsg<S

溫馨提示

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

評論

0/150

提交評論