


下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、網絡編程課程設計報告題 目:基于 Linux 網絡聊天室的設計姓 名 :陳佳悅 陳雄蘭學 院 :信息科學技術學院專 業 :網絡工程班 級 :網絡工程 102學 號 :19310213 19310214指導教師 : 薛 衛 職稱: 副教授基于 Linux 網絡聊天室的設計摘要: 本課程設計是在 Linux 環境下基于 Socket 進行開發的。系統服務器端和 客戶端組成。 服務端程序通過共享存儲區存儲聊天數據, 并發送給每個連接的客 戶端。通過多路復用的子進程實現服務端與多個客戶端之間的數據發送與接收。 可以在單機上開辟兩個窗口分別運行客戶、 服務器的程序。本方案經 gcc 調試器 調試成功,可
2、以在機網絡聊天中使用。關鍵詞: 網絡聊天; linux ;socket1相關概念及技術1.1 網絡套接字編程1.1.1 套接字基本概念套接字是通信的基石,是支持 TCP/IP 協議的網絡通信的基本操作單元。可 以將套接字看作不同主機間的進程進行雙向通信的端點, 它構成了單個主機內及 整個網絡間的編程界面。 套接字存在于通信域中, 通信域是為了處理一般的線程 通過套接字通信而引進的一種抽象概念。 套接字通常和同一個域中的套接字交換 數據(數據交換也可能穿越域的界限,但這時一定要執行某種解釋程序) 。各種 進程使用這個相同的域互相之間用 Internet 協議簇來進行通信。1.1.2 套接字工作原
3、理要通過互聯網進行通信,你至少需要一對套接字, 其中一個運行于客戶機端, 我們稱之為 ClientSocket ,另一個運行于服務器端, 我們稱之為 ServerSocket 。根據連接啟動的方式以及本地套接字要連接的目標, 套接字之間的連接過程 可以分為三個步驟:服務器監聽,客戶端請求,連接確認。所謂服務器監聽, 是服務器端套接字并不定位具體的客戶端套接字, 而是處 于等待連接的狀態,實時監控網絡狀態。所謂客戶端請求, 是指由客戶端的套接字提出連接請求, 要連接的目標是服 務器端的套接字。 為此,客戶端的套接字必須首先描述它要連接的服務器的套接 字,指出服務器端套接字的地址和端口號, 然后就
4、向服務器端套接字提出連接請 求。所謂連接確認,是指當服務器端套接字監聽到或者說接收到客戶端套接字的 連接請求, 它就響應客戶端套接字的請求, 建立一個新的線程, 把服務器端套接 字的描述發給客戶端, 一旦客戶端確認了此描述, 連接就建立好了。 而服務器端 套接字繼續處于監聽狀態,繼續接收其他客戶端套接字的連接請求。1.1.3 linux 中 socket 的基本應用: 服務端建立套接字的大致步驟:(1 )建立 socket 。(2 ) bindPort 綁定特定的端口。(3 )listen 監聽特定的端口。(4 )accept, 當有客戶端連接服務器端口時, accept 接收信息,并返回新的
5、 套接字描述符,提供給操作(5 )根據實際需求, write,read,send,recv 等操作 (6 )關閉套接字。客戶端大致步驟:1) 創建 socket.2) 根據服務器地址, connect 連接到特定服務器。3) write,read 等讀寫操作。4) 關閉套接字。1.2 客戶/ 服務器模型 應用程序之間為了能順利地進行通信, 一方通常需要處于守候狀態, 等待另 一方請求的到來。 在分布式計算中, 一個應用程序被動地等待, 而另一個應用程 序通過請求啟動通信的模式就是客戶服務器模式。客戶/ 服務器模型的典型運行過程包括五個主要步驟:(1) 服務器監聽相應窗口的輸入。(2) 客戶機發
6、出請求。(3) 服務器接收到此請求。(4) 服務器處理此請求,并將結果返回給客戶機。(5) 重復上述過程,直至完成一次會話過程任務。運作過程如下:請求請求 Request響應響應 Request客戶機進程通信設備服務器圖 客戶 /服務器模型運作過程1.3 多路復用技術多路復用一般有以下幾種技術 :(1) 非阻塞通信技術 : 將文件管道設為非阻塞通信方式 , 每隔一段時間對 他們實行一次輪詢 , 以判斷是否可以進行讀寫操作。(2) 信號驅動的異步 I/O 技術。首先 , 異步 I/O 是基于信號機制的 , 并不可 靠。其次 , 單一的信號不足以提供更多的信息來源。 還是需要輔助以其他的手段 ,
7、實現有很高的難度。(3) select() 技術。在 BSD 中提供了一種可以對多路 I/O 進行阻塞式查詢的 方法 select() 。它提供同時對多個 I/O 描述符進行阻塞式查詢的方法。(4) 子進程技術。 應用多個子進程 , 每一個對一個單工阻塞方式通信。 所有 子進程通過 IPC 和父進程進行通信。父進程掌管所有信息。該聊天室即采用此 種子進程技術。1.4 相關函數調用(1) Socket()作用: socket函數為客戶機或服務器創建一個 sokcet格式: int socket(int family,int type,int protocol); 參數說明:Family :表示地
8、址族,可以去 AF_UNLX和 AF_INT。其中,AF_UNLX只能夠用于單一的 UNIX系統進程間通信 ;AF_INT是針對 Internet 的,因而可以允許在遠程主機之間通信,實驗中使用 AF_INT。Type :網絡程序所采用的通信協議, 可以取 SOCK_STREA或MSOCK_DGR。A其M 中, SOCK_STREA表M明使用的是 TCP協議,這樣提供按順序的、可靠的、雙向、面向連 接的比特流; SOCKE_DGRA表M明使用的是 UDP協議,這樣只會提供定長、不可靠、 無連接的通信。(2) bind( )格式: int bind(int sockfd,struct socka
9、ddr *addr,int addrlen);參數說明:Sockfd : socket 的文件描述符號。Sockaddr :表示名字所用的一個數據結構,用來保存地址 ( 包括 IP 地址和端口 )Addrlen: 設置結構大小長度。(3) listen()格式: int listen(int sockfd, int backlog);作用:監聽連接信號,和 accepted 函數合同。參數說明:Sockfd :表示 socket 調用返回的文件描述符。Backlog :表示接入隊列允許的連接數目,大多數系統允許 20 個,也可以子定義 510 個。(4) accept()格式: Int acc
10、ept (int sockfd, void *addr, int *addrlen);作用:與 listen 函數合用,監聽信息、接收客戶端請求。 參數說明:Sockfd :表示 socket 的文件描述符。Addr :表示指向局部的數據結構 struct sockaddr-in 的指針。Addrlen :表示地址的長度。(5) connect()int格 式 : int connect( int sockfd , struct sockaddr *serv_addr addrlen);作用:在面向連接的系統中客戶及連接服務器時使用, connect 必須在 bind 后 使用。參數作用:So
11、ckfd :表示 socket 的文件描述符。Serv-addr :表示村訪目的端口和 ip 地址(套接字)的數據結構。(6) send() 和 recv()格式 1: Int send (int sockfd, const vod *msg,int len, int flags); 功能:發送信息。格式 2: Int recv (int sockfd , void *buf,int len, usigned int flags);作用:用于流式 socket 、數據報 socket 內部之間的通信。(7) bindPort()格式: int bindPort(unsigned short i
12、nt port)作用:創建套接字,并綁定到指定端口。參數說明:指定所指定的端口號。(8) fork() 作用:創建一個新的子進程,而這個子進程是父進程的副本,接下來這兩個進 行就由操作系統調度,直到程序執行結束。2. 系統設計與功能分析2.1 整體程序設計:服務端程序通過共享存儲區存儲聊天數據, 并發送給每個連接的客戶端; 服 務端程序和客戶端程序都是通過父子進程分別負責發送和接收數據的, 以避免數 據沖撞.服務器端程序設計:(1) 建立服務器端,創建共享存儲區,便于客戶與客戶之間的信息交流,及 服務端的記錄。( 2) 創建 socket 套接字 ,并綁定到指定端口, 監聽套接字(客戶套接字)
13、。 ( 3) 在監聽過程中接受客戶端連接,并發送問候信息。( 4)接收到客戶端連接的信息后開始創建子進程, 其中父進程用于接受信息, 子進程用于發送信息,實現多線程操作。2.1.2 客戶端程序設計:(1) 建立一個客戶端的 socket 套接字,綁定客戶端套接字連接服務端。(2) 連接成功后,創建子進程,其中父進程用于接受信息,子進程用于 發送信息。(3)創建子進程成功后,可以進行客戶端與客戶端的通信聊天。2.2 系統功能 :(1)創建服務器后,服務器創建了共享存儲區,方便客戶與客戶之間聊天 信息的記錄,包括聊天具體內容及時間記錄。(2)客戶端創建后如 xx(需輸入 ip 地址、端口號、用戶名
14、 如下面截圖實 例:xx ),在服務器的監聽下,很快 xx 就與服務器建立了 連接。(3)與此同時另一客戶 yy 創建,同理 yy 也與服務器建立了連接,此時兩 客戶端就可以通過服務器建立連接,開始聊天。(4)在服務器上,也一直記錄了客戶端間的聊天記錄具體信息。3. 主要算法及流程圖圖 5 為客戶端主程序的流程圖;圖 6 為客戶端 get() 函數即文件下載的流程圖;圖 7 為服務器端出程序流程圖;4. 系統開發調試與運行環境開發環境:本系統是在 Linux 環境下用 C語言結合網絡編程知識開發的運行環境:虛擬機: Vmware操作系統: Ubuntu-11.10-desktop5. 實驗運行
15、效果截圖演示:第一部分:( 1)服務器端:編譯 s.c 即服務器端程序,運行,顯示如下:說明連接成功,服 務器正在監聽,有無客戶端請求(2)客戶端 1:編譯 c.c 即客戶端程序,運行指定 IP 地址為本機地址,端口號 為 6666 ,用戶名為 xx ,顯示如下:說明已經進入群聊的聊天室。(2)客戶端 2:編譯 c.c 即客戶端程序,運行指定 IP 地址為本機地址,端口號 為 6666 ,用戶名為 yy ,顯示如下:說明已經進入群聊的聊天室。第二部分:(1)客戶端 1:開啟聊天功能, xx 在界面上發起對話2)客戶端 2:當 xx在自己的客戶端 1 界面上發起對話,客戶端 2界面顯示內容,同時
16、 yy也向 xx即客戶端 1發送內容( 3)服務器端: 服務器接收客戶端 1(xx)發送的內容并且傳送給客戶端 2(yy), 同時接收 yy 發送的內容再轉發給 xx。第三部分:聊天截圖hehelocalhost:/Desktop XFileEdit View Search Terminal Help|Hello "Welcome to the chat room!xx:hi? (10:18:14)hello/y:hello (10:18:24)xx:Have we ever beared? (10:20:0)oh.you have forgetten!/y:oh,you have
17、forgetten! (10:20:22)met last month/y:we met last month (10:20:42)hehelocalhost:-/DesktopFile Edit View Search Terminal HelpheheClocalhost Desktop$ gcc -o c c.c|He I to! Welcome to the chat room! hi?xx:hi? (10:18:14)yy:he:lo (10:18:24)Have we ever heared?xx:Have we ever heared? (10:20:0)yy:oh.you ha
18、ve forgetten! (10:20:22)yy:we met last month (10:20:42)雖然實現的只是一個功能相對比較簡單的程序, 但是期間受益匪淺, 一方面是考 察了這一個學期來對 linux 內核編程的學習成果, 檢驗了綜合運用所學知識點的 能力,嘗試將書本的理論知識運用到實踐中, 另一方面在實踐中加深了對理論知 識的理解,發現理論到實際所出現的問題、困難,以及尋找解決的方案,與此同 時能夠讓我們認清自己在學習 Socket 編程不足之處和薄弱環節,并加以彌補和 鞏固,并且通過對線程同步程序的設計和運用,進一步的鞏固用 Socket 編程的 能力,并且也更好的理解操作系統的工作形式。第一次采用 采用 C/S 架構并且 在 linux 環境下編寫程序,比較新鮮但是 期間我們也遇到了很多的困難,例如:( 1) socket 實現過程:服務器端的 recv() 函數,不同情況下,返回的次數 不清楚, 其實是對返回的條件不清楚, 后來經過查閱資料以及對事例的研究, 基 本清楚了它的運用。( 2)在
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- T/CWAN 0046-2022微細直徑導線電阻釬焊工藝規范
- T/CWAN 0030-2021軟釬焊膏質量評價規范
- T/CWAN 0016-2020鐵路車輛用鐵素體不銹鋼及耐大氣腐蝕鋼焊接工藝評定規范
- T/CSRME 027-2022鹽穴儲氣庫對接連通井造腔技術指南
- T/CSBME 079-2024肺癌PET/CT正電子藥物臨床使用質量驗收要求
- T/CSBME 061-2022乳腺X射線高壓發生器
- T/CRIA 26003-2023鋼簾線單位產品能源消耗限額
- T/CNFMA B030-2023戶外林業機械以鋰離子電池為動力源的手持式長桿修枝剪刀
- T/CMMA 6-2019鎂質膠凝材料及制品術語
- T/CITS 0003-2022標準“領跑者”評價要求電冰箱檢驗檢測服務
- 工程勞務合作協議書
- 專利代理師考試題庫有答案分析2024年
- 電表過戶借用協議書
- 老年人房顫的綜合管理
- 2023-2024學年四年級數學下學期開學摸底考試(A4版)(人教版)
- 私人合同協議書模板
- 《城鎮房屋租賃合同(示范文本)》(GF-2025-2614)
- 《建筑電氣工程施工》課件
- 2025年河北高考地理模擬預測試卷(含答案解析)
- 2025-2030中國多發性骨髓瘤的治療行業市場發展趨勢與前景展望戰略研究報告
- 腦卒中后吞咽障礙患者進食護理的團體標準應用案例分享課件
評論
0/150
提交評論