基于TCPIP的網(wǎng)絡(luò)文字聊天程序設(shè)計_第1頁
基于TCPIP的網(wǎng)絡(luò)文字聊天程序設(shè)計_第2頁
基于TCPIP的網(wǎng)絡(luò)文字聊天程序設(shè)計_第3頁
基于TCPIP的網(wǎng)絡(luò)文字聊天程序設(shè)計_第4頁
基于TCPIP的網(wǎng)絡(luò)文字聊天程序設(shè)計_第5頁
已閱讀5頁,還剩19頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、 網(wǎng)絡(luò)編程課程設(shè)計說明書設(shè)計題目基于TCP/IP的網(wǎng)絡(luò)文字聊天程序設(shè)計專業(yè):網(wǎng)絡(luò)工程 班級:網(wǎng)絡(luò)1301班 姓名: 學號: 時間:2015.12.23 目錄一、課程設(shè)計題目1二、設(shè)計要求1(一)對設(shè)計方法的要求1(二)對設(shè)計內(nèi)容的要求1(三)設(shè)計思路與開發(fā)過程1三、設(shè)計原理及Socket套接字1(一)設(shè)計原理1(二)Socket套接字2四、TCP/IP協(xié)議3(一)網(wǎng)絡(luò)接口層3(二)網(wǎng)絡(luò)層3(三)傳輸層4(四)應(yīng)用層4(五)TCP/IP協(xié)議運作機制5(六)通訊端口6(七)IP地址6五、課程設(shè)計內(nèi)容7(一)設(shè)計功能7(二)流程圖7六、程序設(shè)計原理10(一)客戶端10(二)服務(wù)器端10七、程序創(chuàng)建過

2、程10(一)創(chuàng)建服務(wù)器10(二)創(chuàng)建客戶端13八、程序截圖16(一) 服務(wù)器界面截圖16(二) 客戶端界面截圖16九、設(shè)計使用說明18十、此次收獲19十一、設(shè)計需要改進之處19十二、參考文獻19一、 課程設(shè)計題目基于TCP/IP的網(wǎng)絡(luò)文字聊天程序設(shè)計。二、 設(shè)計要求(一) 對設(shè)計方法的要求使用Visual C+6.0開發(fā)在Windows控制臺或圖形界面下運行的程序。(二) 對設(shè)計內(nèi)容的要求時間網(wǎng)絡(luò)文字聊天程序的服務(wù)器端。實現(xiàn)網(wǎng)絡(luò)文字聊天程序的客戶端。主程序的結(jié)構(gòu)和流程圖。程序運行的截圖。網(wǎng)絡(luò)文字聊天程序的實現(xiàn)原理。網(wǎng)絡(luò)文字聊天程序?qū)崿F(xiàn)代碼的分析。對課程設(shè)計說明書的要求。(三) 設(shè)計思路與開發(fā)過

3、程對主要代碼段要求詳細的注釋。對本次設(shè)計的評價與設(shè)計的收獲。三、 設(shè)計原理及Socket套接字(一) 設(shè)計原理計算機網(wǎng)絡(luò)技術(shù)發(fā)展至今已經(jīng)大大超越了人們當初的預想,無論是人們?nèi)粘5墓ぷ鬟€是學習,我們都越來越多的依靠到互聯(lián)網(wǎng)。各種實時性的聊天娛樂軟件也同時誕生,而且為我們的即時通訊帶來了眾多的方便,比如說大家所熟知的騰訊QQ、微軟的MSN、移動的Fetion等,都是做的比較成功的實時聊天工具。隨著網(wǎng)絡(luò)的日益普及,各種聊天工具也層出不窮,但當我們學習了網(wǎng)絡(luò)編程這門課程之后,我們便會覺得,其實要實現(xiàn)簡單的網(wǎng)絡(luò)通訊其實并不難。接下來的課程設(shè)計就是針對一個簡單的網(wǎng)絡(luò)聊天程序,利用MFC為開發(fā)工具,實現(xiàn)基本

4、的通訊功能。此程序主要分為兩部分:服務(wù)器端和客戶端。服務(wù)器端用于提供一個網(wǎng)絡(luò)端口,等待客戶端發(fā)出請求,登錄到此服務(wù)端,然后進行網(wǎng)絡(luò)通訊和消息的轉(zhuǎn)發(fā);客戶端可通過服務(wù)器端的IP地址發(fā)送連接請求,然后登陸聊天室。整個程序的主體使用了CSocket類的方法,實現(xiàn)了網(wǎng)絡(luò)通訊聊天。整個程序設(shè)計為兩個部分:服務(wù)器 (Server)和客戶端 (Client)。多人聊天的關(guān)鍵在于要將每個客戶端發(fā)送過來的消息分發(fā)給所有其他客戶端,為了解決這個問題,在服務(wù)器程序中建立一個套接口鏈表,用來保存所有與客戶端建立了連接的服務(wù)端口。下面描述了多人聊天的實現(xiàn)原理:當客戶端Client N向?qū)?yīng)的服務(wù)端口N發(fā)送了消息Mess

5、age,服務(wù)端口N將Message復制給所有套接口列表(USERLIST)中的套接口緩沖區(qū),然后向每個服務(wù)端口發(fā)送WRITE消息,使每個服務(wù)端口將Message發(fā)送給對應(yīng)的客戶端。這樣,所有客戶端就都獲得了Message消息,實現(xiàn)了多人聊天功能。(二) Socket套接字socket的英文原義是“孔”或“插座”。在這里作為4BDS UNIX的進程通信機制,取后一種意思。socket非常類似于電話插座。以一個國家級電話網(wǎng)為例。電話的通話雙方相當于相互通信的2個進程,區(qū)號是它的網(wǎng)絡(luò)地址;區(qū)內(nèi)一個單位的交換機相當于一臺主機,主機分配給每個用戶的局內(nèi)號碼相當于socket號。任何用戶在通話之前,首先要

6、占有一部電話機,相當于申請一個socket;同時要知道對方的號碼,相當于對方有一個固定的socket。然后向?qū)Ψ綋芴柡艚?,相當于發(fā)出連接請求(假如對方不在同一區(qū)內(nèi),還要撥對方區(qū)號,相當于給出網(wǎng)絡(luò)地址)。對方假如在場并空閑(相當于通信的另一主機開機且可以接受連接請求),拿起電話話筒,雙方就可以正式通話,相當于連接成功。雙方通話的過程,是一方向電話機發(fā)出信號和對方從電話機接收信號的過程,相當于向socket發(fā)送數(shù)據(jù)和從socket接收數(shù)據(jù)。通話結(jié)束后,一方掛起電話機相當于關(guān)閉socket,撤消連接。在電話系統(tǒng)中,一般用戶只能感受到本地電話機和對方電話號碼的存在,建立通話的過程,話音傳輸?shù)倪^程以及整

7、個電話系統(tǒng)的技術(shù)細節(jié)對他都是透明的,這也與socket機制非常相似。socket利用網(wǎng)間網(wǎng)通信設(shè)施實現(xiàn)進程通信,但它對通信設(shè)施的細節(jié)毫不關(guān)心,只要通信設(shè)施能提供足夠的通信能力,它就滿足了。至此,我們對socket進行了直觀的描述。抽象出來,socket實質(zhì)上提供了進程通信的端點。進程通信之前,雙方首先必須各自創(chuàng)建一個端點,否則是沒有辦法建立聯(lián)系并相互通信的。正如打電話之前,雙方必須各自擁有一臺電話機一樣。在網(wǎng)間網(wǎng)內(nèi)部,每一個socket用一個半相關(guān)描述:(協(xié)議,本地地址,本地端口)一個完整的socket有一個本地唯一的socket號,由操作系統(tǒng)分配。最重要的是,socket 是面向客戶/服務(wù)器

8、模型而設(shè)計的,針對客戶和務(wù)器程序提供不同的socket 系統(tǒng)調(diào)用。客戶隨機申請一個socket (相當于一個想打電話的人可以在任何一臺入網(wǎng)電話上撥號呼叫),系統(tǒng)為之分配一個socket號;服務(wù)器擁有全局公認的 socket ,任何客戶都可以向它發(fā)連接請求和信息請求(相當于一個被呼叫的電話擁有一個呼叫方知道的電號碼)。四、 TCP/IP協(xié)議TCP/IP模型也被稱作DoD模型(Department of Defense Model)。TCP/IP字面上代表了兩個協(xié)議:TCP(傳輸控制協(xié)議)和IP(網(wǎng)際協(xié)議)。從協(xié)議分層模型方面來講,TCP/IP由四個層次組成:網(wǎng)絡(luò)接口層、網(wǎng)絡(luò)層、傳輸層、應(yīng)用層。如

9、一圖所示: 圖一 TCP/IP協(xié)議 (一) 網(wǎng)絡(luò)接口層物理層是定義物理介質(zhì)的各種特性:1、機械特性。2、電子特性。3、功能特性。4、規(guī)程特性。數(shù)據(jù)鏈路層是負責接收IP數(shù)據(jù)包并通過網(wǎng)絡(luò)發(fā)送,或者從網(wǎng)絡(luò)上接收物理幀,抽出IP數(shù)據(jù)包,交給IP層。常見的接口層協(xié)議有:Ethernet 802.3、Token Ring 802.5、X.25、Frame relay、HDLC、PPP ATM等。(二) 網(wǎng)絡(luò)層負責相鄰計算機之間的通信。其功能包括三方面。一、處理來自傳輸層的分組發(fā)送請求,收到請求后,將分組裝入IP數(shù)據(jù)報,填充報頭,選擇去往信宿機的路徑,然后將數(shù)據(jù)報發(fā)往適當?shù)木W(wǎng)絡(luò)接口。二、處理輸入數(shù)據(jù)報:首先

10、檢查其合法性,然后進行尋徑-假如該數(shù)據(jù)報已到達信宿機,則去掉報頭,將剩下部分交給適當?shù)膫鬏攨f(xié)議;假如該數(shù)據(jù)報尚未到達信宿,則轉(zhuǎn)發(fā)該數(shù)據(jù)報。三、處理路徑、流控、擁塞等問題。網(wǎng)絡(luò)層包括:IP(Internet Protocol)協(xié)議、ICMP(Internet Control Message Protocol)控制報文協(xié)議、ARP(Address Resolution Protocol)地址轉(zhuǎn)換協(xié)議、RARP(Reverse ARP)反向地址轉(zhuǎn)換協(xié)議。IP是網(wǎng)絡(luò)層的核心,通過路由選擇將下一條IP封裝后交給接口層。IP數(shù)據(jù)報是無連接服務(wù)。ICMP是網(wǎng)絡(luò)層的補充,可以回送報文。用來檢測網(wǎng)絡(luò)是否通暢。P

11、ing命令就是發(fā)送ICMP的echo包,通過回送的echo relay進行網(wǎng)絡(luò)測試。ARP是正向地址解析協(xié)議,通過已知的IP,尋找對應(yīng)主機的MAC地址。RARP是反向地址解析協(xié)議,通過MAC地址確定IP地址。比如無盤工作站還有DHCP服務(wù)。(三) 傳輸層提供應(yīng)用程序間的通信。其功能包括:一、格式化信息流;二、提供可靠傳輸。為實現(xiàn)后者,傳輸層協(xié)議規(guī)定接收端必須發(fā)回確認,并且假如分組丟失,必須重新發(fā)送,即耳熟能詳?shù)娜挝帐诌^程,從而提供可靠的數(shù)據(jù)傳輸。傳輸層協(xié)議主要是:傳輸控制協(xié)議TCP(Transmission Control Protocol)和用戶數(shù)據(jù)報協(xié)議UDP(User Datagram

12、 protocol)。(四) 應(yīng)用層向用戶提供一組常用的應(yīng)用程序,比如電子郵件、文件傳輸訪問、遠程登錄等。遠程登錄TELNET使用TELNET協(xié)議提供在網(wǎng)絡(luò)其它主機上注冊的接口。TELNET會話提供了基于字符的虛擬終端。文件傳輸訪問FTP使用FTP協(xié)議來提供網(wǎng)絡(luò)內(nèi)機器間的文件拷貝功能。應(yīng)用層協(xié)議主要包括如下幾個:FTP、TELNET、DNS、SMTP、RIP、NFS、HTTP。FTP(File Transfer Protocol)是文件傳輸協(xié)議,一般上傳下載用FTP服務(wù),數(shù)據(jù)端口是20號,控制端口是21號。Telnet服務(wù)是用戶遠程登錄服務(wù),使用23號端口,使用明碼傳送,保密性差、簡單方便。D

13、NS(Domain Name Service)是域名解析服務(wù),提供域名到IP地址之間的轉(zhuǎn)換。SMTP(Simple Mail Transfer Protocol)是簡單郵件傳輸協(xié)議,用來控制信件的發(fā)送、中轉(zhuǎn)。RIP (Router Information Protocol)是路由信息協(xié)議,用于網(wǎng)絡(luò)設(shè)備之間交換路由信息。NFS (Network File System)是網(wǎng)絡(luò)文件系統(tǒng),用于網(wǎng)絡(luò)中不同主機間的文件共享。HTTP(Hypertext Transfer Protocol)是超文本傳輸協(xié)議,用于實現(xiàn)互聯(lián)網(wǎng)中的WWW服務(wù)。(五) TCP/IP協(xié)議運作機制1.IP:IP層接收由更低層(網(wǎng)絡(luò)接

14、口層例如以太網(wǎng)設(shè)備驅(qū)動程序)發(fā)來的數(shù)據(jù)包,并把該數(shù)據(jù)包發(fā)送到更高層-TCP或UDP層;相反,IP層也把從TCP或UDP層接收來的數(shù)據(jù)包傳送到更低層。IP數(shù)據(jù)包是不可靠的,因為IP并沒有做任何事情來確認數(shù)據(jù)包是按順序發(fā)送的或者沒有被破壞。IP數(shù)據(jù)包中含有發(fā)送它的主機的地址(源地址)和接收它的主機的地址(目的地址)。高層的TCP和UDP服務(wù)在接收數(shù)據(jù)包時,通常假設(shè)包中的源地址是有效的。也可以這樣說,IP地址形成了許多服務(wù)的認證基礎(chǔ),這些服務(wù)相信數(shù)據(jù)包是從一個有效的主機發(fā)送來的。IP確認包含一個選項,叫作IP source routing,可以用來指定一條源地址和目的地址之間的直接路徑。對于一些TC

15、P和UDP的服務(wù)來說,使用了該選項的IP包好像是從路徑上的最后一個系統(tǒng)傳遞過來的,而不是來自于它的真實地點。這個選項是為了測試而存在的,說明了它可以被用來欺騙系統(tǒng)來進行平常是被禁止的連接。那么,許多依靠IP源地址做確認的服務(wù)將產(chǎn)生問題并且會被非法入侵。2.TCP:TCP是面向連接的通信協(xié)議,通過三次握手建立連接,通訊完成時要拆除連接,由于TCP是面向連接的所以只能用于點對點的通訊。TCP提供的是一種可靠的數(shù)據(jù)流服務(wù),采用帶重傳的肯定確認技術(shù)來實現(xiàn)傳輸?shù)目煽啃?。TCP還采用一種稱為滑動窗口的方式進行流量控制,所謂窗口實際表示接收能力,用以限制發(fā)送方的發(fā)送速度。如果IP數(shù)據(jù)包中有已經(jīng)封好的TCP數(shù)

16、據(jù)包,那么IP將把它們向上傳送到TCP層。TCP將包排序并進行錯誤檢查,同時實現(xiàn)虛電路間的連接。TCP數(shù)據(jù)包中包括序號和確認,所以未按照順序收到的包可以被排序,而損壞的包可以被重傳。TCP將它的信息送到更高層的應(yīng)用程序,例如Telnet的服務(wù)程序和客戶程序。應(yīng)用程序輪流將信息送回TCP層,TCP層便將它們向下傳送到IP層,設(shè)備驅(qū)動程序和物理介質(zhì),最后到接收方。面向連接的服務(wù)(例如Telnet、FTP、rlogin、X Windows和SMTP)需要高度的可靠性,所以它們使用了TCP。DNS在某些情況下使用TCP(發(fā)送和接收域名數(shù)據(jù)庫),但使用UDP傳送有關(guān)單個主機的信息。3.UDP:UDP是面

17、向無連接的通訊協(xié)議,UDP數(shù)據(jù)包括目的端口號和源端口號信息,由于通訊不需要連接,所以可以實現(xiàn)廣播發(fā)送。UDP通訊時不需要接收方確認,屬于不可靠的傳輸,可能會出丟包現(xiàn)象,實際應(yīng)用中要求在程序員編程驗證。UDP與TCP位于同一層,但它不管數(shù)據(jù)包的順序、錯誤或重發(fā)。因此,UDP不被應(yīng)用于那些使用虛電路的面向連接的服務(wù),UDP主要用于那些面向查詢-應(yīng)答的服務(wù),例如NFS。相對于FTP或Telnet,這些服務(wù)需要交換的信息量較小。使用UDP的服務(wù)包括NTP(網(wǎng)絡(luò)時間協(xié)議)和DNS(DNS也使用TCP)。欺騙UDP包比欺騙TCP包更容易,因為UDP沒有建立初始化連接(也可以稱為握手)(因為在兩個系統(tǒng)間沒有

18、虛電路),也就是說,與UDP相關(guān)的服務(wù)面臨著更大的危險。4.ICMP:ICMP與IP位于同一層,它被用來傳送IP的的控制信息。它主要是用來提供有關(guān)通向目的地址的路徑信息。ICMP的Redirect信息通知主機通向其他系統(tǒng)的更準確的路徑,而Unreachable信息則指出路徑有問題。另外,如果路徑不可用了,ICMP可以使TCP連接體面地終止。PING是最常用的基于ICMP的服務(wù)。(六) 通訊端口TCP和UDP服務(wù)通常有一個客戶/服務(wù)器的關(guān)系,例如,一個Telnet服務(wù)進程開始在系統(tǒng)上處于空閑狀態(tài),等待著連接。用戶使用Telnet客戶程序與服務(wù)進程建立一個連接??蛻舫绦蛳蚍?wù)進程寫入信息,服務(wù)進程

19、讀出信息并發(fā)出響應(yīng),客戶程序讀出響應(yīng)并向用戶報告。因而,這個連接是雙工的,可以用來進行讀寫。兩個系統(tǒng)間的多重Telnet連接是如何相互確認并協(xié)調(diào)一致呢?TCP或UDP連接唯一地使用每個信息中的如下四項進行確認:源IP地址 發(fā)送包的IP地址。目的IP地址 接收包的IP地址。源端口 源系統(tǒng)上的連接的端口。目的端口 目的系統(tǒng)上的連接的端口。端口是一個軟件結(jié)構(gòu),被客戶程序或服務(wù)進程用來發(fā)送和接收信息。一個端口對應(yīng)一個16比特的數(shù)。服務(wù)進程通常使用一個固定的端口,例如,SMTP使用25、Xwindows使用6000。這些端口號是廣為人知的,因為在建立與特定的主機或服務(wù)的連接時,需要這些地址和目的地址進行

20、通訊。(七) IP地址在Internet上連接的所有計算機,從大型機到微型計算機都是以獨立的身份出現(xiàn),我們稱它為主機。為了實現(xiàn)各主機間的通信,每臺主機都必須有一個唯一的網(wǎng)絡(luò)地址。就好像每一個住宅都有唯一的門牌一樣,才不至于在傳輸資料時出現(xiàn)混亂。Internet的網(wǎng)絡(luò)地址是指連入Internet網(wǎng)絡(luò)的計算機的地址編號。所以,在Internet網(wǎng)絡(luò)中,網(wǎng)絡(luò)地址唯一地標識一臺計算機。我們都已經(jīng)知道,Internet是由幾千萬臺計算機互相連接而成的。而我們要確認網(wǎng)絡(luò)上的每一臺計算機,靠的就是能唯一標識該計算機的網(wǎng)絡(luò)地址,這個地址就叫做IP(Internet Protocol的簡寫)地址,即用Inter

21、net協(xié)議語言表示的地址。目前,在Internet里,IP地址是一個32位的二進制地址,為了便于記憶,將它們分為4組,每組8位,由小數(shù)點分開,用四個字節(jié)來表示,而且,用點分開的每個字節(jié)的數(shù)值范圍是0255,如,這種書寫方法叫做點數(shù)表示法。五、 課程設(shè)計內(nèi)容(一) 設(shè)計功能實現(xiàn)網(wǎng)絡(luò)文字聊天程序的基本功能。主要包括:1. TCP聊天服務(wù)器程序2. TCP聊天客戶端程序(二) 流程圖1. 服務(wù)器流程圖開始啟動服務(wù)器輸入IP,端口號 判斷輸入IP是否為本機IP 否設(shè)置不成功 是是設(shè)置成功 結(jié)束圖二 服務(wù)器流程圖2. 客戶端流程圖開始運行客戶端鏈接服務(wù)器 重新連接是否連接成功 否

22、是進入聊天室輸入文字重新連接結(jié)束圖三 客戶端流程圖六、 程序設(shè)計原理(一) 客戶端鏈接到同一服務(wù)器的人進入一個聊天室,然后開始文字聊天。(二) 服務(wù)器端根據(jù)本臺計算機的IP地址創(chuàng)建服務(wù)器。如果IP地址不同,則創(chuàng)建失;相同則創(chuàng)建成功七、 程序創(chuàng)建過程(一) 創(chuàng)建服務(wù)器1、創(chuàng)建一個基于對話框的應(yīng)用程序,工程名為Server,服務(wù)器對話框資源圖如圖4所示:圖4設(shè)計界面2、在類CServerAPP中InitInstance方法中初始化套接字。代碼如下:WSADATA wsd;AfxSocketInit(&wsd);3、從CSocket類中派生出CClientSocket類,在該類中定義成員變量m_pD

23、lg,代碼如下:protected:CServerDlg* m_pDlg;4、向CServerSocket類中添加SetDialog函數(shù),為m_pDlg成員變量賦值。代碼如下:void CServerSocket:SetDialog(CServerDlg* pDialog) m_pDlg = pDialog;5、改寫CServerSocket類中的OnAccept旭方法,在套接字有連接請求時接受其連接。代碼如下:void CServerSocket:OnAccept(int nErrorCode) CSocket:OnAccept(nErrorCode);if (m_pDlg)m_pDlg-A

24、cceptConnect();6、從CSocket類再次派生一個新類CClientSocket,在該類中定義成員變量m_pDlg。代碼如下:protected:CServerDlg* m_pDlg;7、向CClientSocket類中添加SetDialog函數(shù),為m_pDlg成員變量賦值。代碼如下:void CClientSocket:SetDialog(CServerDlg* pDialog)m_pDlg = pDialog;8、改寫CServerSocket類中的OnReceive旭方法,在套接字有數(shù)據(jù)接收時接收數(shù)據(jù)。代碼如下:void CClientSocket:OnReceive(in

25、t nErrorCode) CSocket:OnReceive(nErrorCode);if(m_pDlg)m_pDlg-ReceiveData(*this);9、在對話框類中添加如下成員變量:CPtrList m_socketlist;CServerSocket m_ServerSock;10、向?qū)υ捒蝾愔刑砑覣cceptConnect方法,接受客戶端的連接。代碼如下:void CServerDlg:AcceptConnect()CClientSocket* psocket = new CClientSocket();psocket-SetDialog(this);if (m_ServerS

26、ock.Accept(*psocket)m_socketlist.AddTail(psocket);elsedelete psocket;11、向?qū)υ捒蝾愔刑砑覴eceiveData方法,用于接收套接字數(shù)據(jù)。代碼如下:void CServerDlg:ReceiveData(CSocket &socket)char bufferdataBUFFERSIZE;int len = socket.Receive(bufferdata,BUFFERSIZE);if (len != -1)bufferdatalen = 0;POSITION pos = m_socketlist.GetHeadPositi

27、on();while (pos != NULL)CClientSocket* socket = (CClientSocket*)m_socketlist.GetNext(pos);if (socket != NULL)socket-Send(bufferdata,len);12、處理“設(shè)置”按鈕的單擊事件,創(chuàng)建并開始監(jiān)聽套接字。代碼如下:void CServerDlg:OnConfig() m_ServerSock.SetDialog(this);CString strPort,strIP;m_ServerPort.GetWindowText(strPort);m_ServerIP.GetWi

28、ndowText(strIP);if (!strPort.IsEmpty() & !strIP.IsEmpty()UINT port = atoi(strPort);m_ServerSock.Create(port,SOCK_STREAM,strIP);BOOL ret = m_ServerSock.Listen();if (ret)MessageBox(設(shè)置成功!,提示);(二) 創(chuàng)建客戶端1、創(chuàng)建一個基于對話框的應(yīng)用程序,工程名為Client,服務(wù)器對話框資源圖,如圖5所示圖5設(shè)計界面2、在類CClientApp中InitInstance方法中初始化套接字。代碼如下:WSADATA wsd

29、; WSAStartup(MAKEWORD(2,2),&wsd);3、從CSocket類中派生出CClientSocket類,在該類中添加m_pDialog成員。代碼如下:protected:CClientDlg *m_pDialog;4、在CClientSocket中添加SetDialog方法,用于設(shè)置成員變量。代碼如下:void CClientSocket:SetDialog(CClientDlg *pDialog)m_pDialog = pDialog;5、改寫CClientSocket類中的OnReceive旭方法,在套接字有數(shù)據(jù)接收時調(diào)用該方法。代碼如下:void CClientSo

30、cket:OnReceive(int nErrorCode) CSocket:OnReceive(nErrorCode);if (m_pDialog != NULL)m_pDialog-ReceiveText();6、在對話框類中添加如下成員變量:CClientSocket m_SockClient;CString m_Name;7、在對話框類中添加ReceiveText方法接收數(shù)據(jù)。代碼如下:void CClientDlg:ReceiveText()char bufferBUFFERSIZE;int len = m_SockClient.Receive(buffer,BUFFERSIZE);

31、if (len != -1)bufferlen = 0;m_List.AddString(buffer);8、在對話框初始化時創(chuàng)建套接字。代碼如下:m_SockClient.Create();m_SockClient.SetDialog(this);9、處理“登錄”按鈕的單擊事件,開始登錄服務(wù)器。代碼如下:void CClientDlg:OnLogin() CString strIP,strPort;UINT port ;m_ServerIP.GetWindowText(strIP);m_NickName.GetWindowText(m_Name);m_ServerPort.GetWindow

32、Text(strPort);if (strIP.IsEmpty() | strPort.IsEmpty() | m_Name.IsEmpty()MessageBox(請設(shè)置服務(wù)器信息,提示);return;port = atoi(strPort);if (m_SockClient.Connect(strIP,port)MessageBox(連接服務(wù)器成功!,提示);CString str;str.Format(%s-%s,m_Name,進入聊天室);m_SockClient.Send(str.GetBuffer(0),str.GetLength();elseMessageBox(連接服務(wù)器失敗

33、!,提示);10、處理“發(fā)送”按鈕的單擊事件,向服務(wù)器發(fā)送數(shù)據(jù),再由服務(wù)器轉(zhuǎn)發(fā)這些數(shù)據(jù)。代碼如下:void CClientDlg:OnSendText() CString strText,strInfo;m_Text.GetWindowText(strText);if (!strText.IsEmpty() & !m_Name.IsEmpty()strInfo.Format(%s說: %s,m_Name,strText);int len = m_SockClient.Send(strInfo.GetBuffer(strInfo.GetLength(),strInfo.GetLength();八

34、、 程序截圖(1) 服務(wù)器界面截圖運行客戶服務(wù)器端程序并輸入IP地址及端口號,如圖六所示圖六 設(shè)置服務(wù)器點擊啟動之后如圖七所示圖七 設(shè)置成功(2) 客戶端界面截圖雙方運行客戶程序后,輸入事先設(shè)定好的IP地址及端口號并輸入自己的用戶名。然后對話框中會提示,你已進入聊天室。此時你可以在下面的編輯框中輸入你想要發(fā)送的信息;點擊發(fā)送,你可以在對話框中看到你發(fā)出去的信息以及別人發(fā)出的信息。如圖八,圖九所示圖八 唐冰進入聊天室并發(fā)送消息 圖九 唐冰1號進入聊天室開始發(fā)送消息九、 設(shè)計使用說明此聊天程序的實現(xiàn)主要通過兩部分實現(xiàn),一個是客戶端,一個是服務(wù)器端。服務(wù)器端可開啟服務(wù),等待用戶登錄,實現(xiàn)消息的中轉(zhuǎn)發(fā)送;客戶端可以通過服務(wù)器端的IP地址登陸到聊天室,從而接入聊天網(wǎng)絡(luò),實現(xiàn)局域互通。接下來就介紹一下此程序的使用過程:首先,服務(wù)器端應(yīng)該開啟監(jiān)聽服務(wù),等待客戶端的連接請求,并實時的給

溫馨提示

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

最新文檔

評論

0/150

提交評論