【正文】
基于TCP/IP的網(wǎng)絡(luò)聊天工具的設(shè)計與實現(xiàn)摘要Socket 接口是TCP/ IP 網(wǎng)絡(luò)的API(應(yīng)用程序接口) ,Windows Sockets (Winsock) 是一個基于Socket 模型的API。本文通過論述了Windows 環(huán)境下的實現(xiàn)計算機數(shù)據(jù)傳輸服務(wù)的機制,提供了一種網(wǎng)絡(luò)環(huán)境下實現(xiàn)計算機通信的手段,分析了TCP/ IP 協(xié)議的體系結(jié)構(gòu)、組成與功能以及通過TCP/ IP 協(xié)議實現(xiàn)異構(gòu)型網(wǎng)絡(luò)互連的機理。對TCP/ IP 協(xié)議提供的兩種通信功能進行了分析,辯證地提出了它們不同的應(yīng)用場合。本聊天工具使用VC++語言和較成熟的微軟的mfc71作為開發(fā)語言,本文詳細介紹了本聊天工具的開發(fā)過程。并從系統(tǒng)的需求分析、系統(tǒng)分析、詳細設(shè)計的整個開發(fā)過程進行全面論述。最后,給出了在TCP/ IP 基礎(chǔ)上開發(fā)通信應(yīng)用程序的編程模型和實現(xiàn)要點,對用戶開發(fā)應(yīng)用程序有一定參考意義。關(guān)鍵詞: 網(wǎng)絡(luò)。TCP/ IP 協(xié)議 通信編程 VC++Abstract Socke interface is a API of TCP/ IP network and Winsock is another API which is base of the model of Socket ,This article discuss a service mechanismof puter data munications, providing a means of achieve puter munications in networks environment , analyzes the system construction , position and function of TCP/ IP protocol , and realization mechanism intermunication between isomerous networks through TCP/ IP protocols. The paper also analyzes two kinds of munication functions provided by TCP/ IP protocols , and proposes their different application occasions dialectically .this article use takes fundamentally with the VC++ language,in detail introduced this management system management system performance from system demand analysis, system analysis, detailed design entire performance history .. Finally , the paper gives programming models and realization keys of developing munication programs , which will provide some reference value for users who develop application programs.Key words :network TCP/ IP protocols munication program VC++摘要 1Abstract 11 引言 32系統(tǒng)分析 4 需求分析 4 技術(shù)分析 4 Socket 編程的相關(guān)知識與技術(shù) 4 程序語言的選擇 5 5 開發(fā)及運行環(huán)境 5 6 6 6 7 7 錯誤!未定義書簽。5系統(tǒng)功能實現(xiàn) 10 10 錯誤!未定義書簽。 11 錯誤!未定義書簽。 錯誤!未定義書簽。4 結(jié)束語 147 致謝 15參考文獻 151 引言Internet上的聊天室一向是一個吸引人的地方,多用C語言或是web網(wǎng)絡(luò)語言進行設(shè)計。Internet上數(shù)據(jù)傳輸協(xié)議主要有TCP和UDP。TCP是有連接協(xié)議.它要求計算機進行對話時必須先建立連接。保證數(shù)據(jù)傳送安全到達目的地。UDP是無連接協(xié)議。它只是將信息送到網(wǎng)絡(luò)上,并不檢查數(shù)據(jù)是否到達了目的地。要進行實時會話。則應(yīng)該采用TCP協(xié)議。本程序采用的協(xié)議就是TCP協(xié)議。傳輸控制協(xié)議TCP (Transmission Control Protocol) 是Internet 最基本的網(wǎng)絡(luò)通信協(xié)議, 它由一系列協(xié)議組成,其中核心協(xié)議是傳輸層的TCP和UDP( User Datagram Protocol, 用戶數(shù)據(jù)報協(xié)議)協(xié)議。TCP 協(xié)議屬于“ 面向連接,可靠傳輸”的類型, 面向連接的傳輸意味著在進行通信以前, 需要在兩個系統(tǒng)之間建立邏輯連接, 在每個數(shù)據(jù)傳輸?shù)倪^程中都需要進行應(yīng)答以保證數(shù)據(jù)包的完整, 這種方法可以保證數(shù)據(jù)傳輸?shù)目煽啃?但所需的網(wǎng)絡(luò)開銷較大;UDP 協(xié)議屬于“ 面向無連接, 不可靠傳輸”的類型, 該協(xié)議只負責接收和傳送上層協(xié)議傳遞的消息, 它本身不做任何的檢測、修改與應(yīng)答, 網(wǎng)絡(luò)開銷一般要小于TCP協(xié)議。在優(yōu)良的網(wǎng)絡(luò)環(huán)境, UDP 的工作效率較TCP 協(xié)議要高。在Windows 環(huán)境下開發(fā)網(wǎng)絡(luò)應(yīng)用程序, 通常都是使用Microsoft的網(wǎng)絡(luò)編程接口, 即Windows 套接字Windows Socket( 簡稱Winsock), 中的一組API 中,用于在網(wǎng)絡(luò)上傳輸數(shù)據(jù)和交換信息, 編程人員需要熟悉和掌握相關(guān)的網(wǎng)絡(luò)協(xié)議、系統(tǒng)的底層知識以及網(wǎng)絡(luò)軟硬件技術(shù), 因而Winsock 編程相當復(fù)雜。所幸的是, MFC的CSocket類對WinSock 進行了有效的封裝, 并不需要直接與Winsock 的API 打交道, 調(diào)用CSocket類的一些方法成員,就可以方便進行機器之間的通訊,使得對Winsock 的訪問大大簡化。 網(wǎng)絡(luò)聊天工具的特性(1)多功能。作為一種即時通信工具,一般聊天工具支持顯示朋友在線、尋呼、聊天、即時傳送文字、語音和文件等功能,支持視頻功能的視頻。(2)超時空。通過互聯(lián)網(wǎng),信息傳遞擺脫了時空的限制,只要交流雙方是與網(wǎng)絡(luò)相連通的,不管對方身在何處,雙方都可以進行即時對話。這種散點式的人際傳播對于整個組織機構(gòu)的健康運作有著不可低估的作用。(3)互動性。網(wǎng)絡(luò)聊天接近于現(xiàn)實生活的最大量交流,是一種面對面的共時態(tài)的直接交流。它可以進行實時的一對一、一對多、多對多的互動交流,實時地對對方做出反應(yīng)??梢酝ㄟ^留言,即使對方不在線,也可以在上線的同時第一時間收到信息。網(wǎng)絡(luò)聊天工具還可以與移動通訊終端、IP 電話網(wǎng)、無線尋呼等多種通訊方式相連,是一種方便、實用、高效的即時通信工具。(4)平等性。網(wǎng)絡(luò)世界的虛擬性、平等性以及網(wǎng)絡(luò)信息傳遞的瞬時性,滿足了大學生輕松交往的要求。正是這些特性,可以使大學生暫時掩蓋自身任何的缺點和不足,可以擺脫現(xiàn)實交往中容易產(chǎn)生的各種矛盾,更不必顧及輿論的壓力而使得師生在交流過程中受到更少的束縛,最終使大學生在虛擬的網(wǎng)絡(luò)中能夠更輕松地面對友(愛)情,交往需求在網(wǎng)絡(luò)中得到充分的滿足。(5)距離感。網(wǎng)絡(luò)的距離掩蓋了真實的缺點,容易產(chǎn)生美感。心理學家分析,距離可以使人產(chǎn)生朦朧,朦朧為想象提供了足夠的空間,想象則可以產(chǎn)生美感。 完成的功能本次畢業(yè)設(shè)計從實際工程應(yīng)用角度出發(fā),以計算機網(wǎng)絡(luò)原理為指導,結(jié)合當前網(wǎng)絡(luò)中的一些常用技術(shù),編程實現(xiàn)基于TCP/IP的網(wǎng)絡(luò)聊天工具,該聊天工具具有聊天室聊天、廣播聊天、。2系統(tǒng)分析 需求分析通過調(diào)查研究,要求系統(tǒng)滿足有以下功能;1) 由于操作人員的計算機知識普遍較差,要求有良好的人機界面。2) 客戶端操作,用戶登錄,進入聊天室。3) 實現(xiàn)廣播聊天、聊天室聊天、二人私聊、文件傳輸四個功能。4) 服務(wù)端操作,顯示所有在線用戶,選擇某用戶后可以進行刪除操作5) 系統(tǒng)退出。6) 系統(tǒng)要體現(xiàn)界面友好,使用方便的特性。 技術(shù)分析 Socket 編程的相關(guān)知識與技術(shù)Socket 進行網(wǎng)絡(luò)通信有兩種主要的方式。第一種為流方式(Stream Socket), 也稱面向連接方式, 用于實現(xiàn)TCP 協(xié)議。在這種方式下, 兩個應(yīng)用程序之間先要建立一種虛擬的連接。只有兩端的程序成功地進行了握手之后才能開始傳輸數(shù)據(jù)。其特點是通信可靠, 對數(shù)據(jù)有校驗和重發(fā)的機制, 通常用作數(shù)據(jù)文件的傳輸, 如FTP、TELNET等。第二種為數(shù)據(jù)報文方式(Datagram Socket),又稱無連接方式, 在進行數(shù)據(jù)傳送以前兩端的程序不需要任何溝通。數(shù)據(jù)報文方式由于取消了重發(fā)校驗機制,能夠達到較高的通信速率, 可以用作對數(shù)據(jù)可靠性要求不高的通信, 如實時的語音、圖像轉(zhuǎn)送、廣播消息等。面向連接的Socket工作中有比較嚴格的操作次序。在這種類型的Socket 工作過程中,必須首先啟動服務(wù)器端,通過調(diào)用socket()函數(shù)建立一個socket 對象, 然后調(diào)用bind()函數(shù)將該socket對象和本地網(wǎng)絡(luò)地址綁定到一起,再調(diào)用listen()函數(shù)使該socket對象處于偵聽狀態(tài),并規(guī)定它的最大請求的數(shù)量;之后要—直等到客戶機有連接請求的時候服務(wù)器才會再次被激活;收到客戶機請求以后, 服務(wù)器調(diào)用accept()函數(shù)來決定是否接受該連接。 客戶在建立Socket 對象后就可調(diào)用connect()函數(shù)和服務(wù)器建立連接。 連接一旦建立, 客戶機和服務(wù)器之間就可以通過調(diào)用基本的網(wǎng)絡(luò)I/O 函數(shù)來發(fā)送和接收數(shù)據(jù)。 一旦數(shù)據(jù)傳送結(jié)束, 雙方都必須關(guān)閉初始創(chuàng)建的socket 對象。在網(wǎng)絡(luò)通信中, 由于網(wǎng)絡(luò)擁擠或一次發(fā)送的數(shù)據(jù)量過大等原因, 經(jīng)常會發(fā)生交換的數(shù)據(jù)在短時間內(nèi)不能傳送完、收發(fā)數(shù)據(jù)的函數(shù)不能返回的現(xiàn)象, 這種現(xiàn)象叫阻塞。Winsock 對有可能發(fā)生阻塞的函數(shù)提供了兩種處理方式——阻塞和非阻塞方式。在阻塞方式下, 收發(fā)數(shù)據(jù)的函數(shù)在被調(diào)用后一直要到傳送完畢或者出錯才能返回。阻塞方式是UNIX 中Socket 工作的默認方式, 可是在Windows 系統(tǒng)中這種方式是無法容忍的。在Windows 系統(tǒng)中, 如果一個函數(shù)長時間沒有返回值, 系統(tǒng)就很難為其他的程序分配出運行時間, 常見的現(xiàn)象就是對輸入沒有響應(yīng), 刷屏緩慢, 系統(tǒng)反應(yīng)遲鈍等。因此, 在編程時, 應(yīng)盡量使用非阻塞方式。 TCP/IP協(xié)議介紹TCP/IP協(xié)議并不完全符合OSI的七層參考模型。傳統(tǒng)的開放式系統(tǒng)互連參考模型,是一種通信協(xié)議的7層抽象的參考模型,其中每一層執(zhí)行某一特定任務(wù)。該模型的目的是使各種硬件在相同的層次上相互通信。這7層是:物理層、數(shù)據(jù)鏈路層、網(wǎng)路層、傳輸層、話路層、表示層和應(yīng)用層。而TCP/IP通訊協(xié)議采用了4層的層級結(jié)構(gòu),每一層都呼叫它的下一層所提供的網(wǎng)絡(luò)來完成自己的需求。這4層分別為: 應(yīng)用層:應(yīng)用程序間溝通的層,如簡單電子郵件傳輸(SMTP)、文件傳輸協(xié)議(FTP)、網(wǎng)絡(luò)遠程訪問協(xié)議(Telnet)等。 傳輸層:在此層中,它提供了節(jié)點間的數(shù)據(jù)傳送服務(wù),如傳輸控制協(xié)議(TCP)、用戶數(shù)據(jù)報協(xié)議(UDP)等,TCP和UDP給數(shù)據(jù)包加入傳輸數(shù)據(jù)并把它傳輸?shù)较乱粚又?,這一層負責傳送數(shù)據(jù),并且確定數(shù)據(jù)已被送達并接收。 互連網(wǎng)絡(luò)層:負責提供基本的數(shù)據(jù)封包傳送功能,讓每一塊數(shù)據(jù)包都能夠到達目的主機(但不檢查是否被正確接收),如網(wǎng)際協(xié)議(IP)。 網(wǎng)絡(luò)接口層:對實際的網(wǎng)絡(luò)媒體的管理,定義如何使用實際網(wǎng)絡(luò)(如Ethernet、Serial Line等)來傳送數(shù)據(jù)。 程序語言的選擇本系統(tǒng)采用VC++.NET 2003作為程序開發(fā)語言。VC++是Windows平臺上的C++編程環(huán)境,學習VC要了解很多Windows平臺的特性并且還要掌握MFC、ATL、COM等的知識,難度比較大。Windows下編程需要了解Windows的消息機制以及回調(diào)(callback)函數(shù)的原理;MFC是Win32API的包裝類,需要理解文檔視圖類的結(jié)構(gòu),窗口類的結(jié)構(gòu),消息流向等等;COM是代碼共享的二進制標準,需要掌握其基本原理等等。 VC作為一個主流的開發(fā)平臺一直深受編程愛好者的喜愛,但是很多人卻對它的入門感到難于上青天,究其原因主要是大家對他錯誤的認識造成的,嚴格的來說VC++不是門語言,雖然它和C++之間有密切的關(guān)系,如果形象點比喻的話,可以C++看作為一種“工業(yè)標準”,而VC++則是某種操作系統(tǒng)平臺下的“廠商標準”,而“廠商標準”是在遵循“工業(yè)標準”的前提下擴展而來的。VC++應(yīng)用程序的開發(fā)主要有兩種模式,一種是WIN API方式,另一種則是MFC方式,傳統(tǒng)的WIN API開發(fā)方式比較繁瑣,而MFC則是對WIN API再次封裝,所以MFC相對于WIN API開發(fā)更具備效率優(yōu)勢,但為了對WINDOWS開發(fā)有一個較為全面細致的認識,筆者在這里還是以講解WIN API的相關(guān)內(nèi)容為主線。 開發(fā)及運行環(huán)境硬件平臺:1) CPU:P4 。2) 內(nèi)存:256MB以上。軟件平臺:1) 操作系統(tǒng):Windows XP/ Windows 2000。2) 開發(fā)語言:VC++3) 開發(fā)平臺:Visual Studio 20034) 分辨率:最佳效果1024768像素本次畢業(yè)采用了面向連接的數(shù)據(jù)流,即基于TCP協(xié)議的連接方式,其工作流程如圖1 所示。圖1面向連接的Socket 工作流程圖系統(tǒng)穩(wěn)定性:在設(shè)計該系統(tǒng)時,很重要的一個問題就是系統(tǒng)的長期穩(wěn)定運行,因為客戶端可能很多個,考慮到系統(tǒng)的運行環(huán)境等條件,必須從系統(tǒng)分析的高度給與足夠重視,保證服務(wù)器能夠較長時間的運行系統(tǒng)健壯性:系統(tǒng)需要長期穩(wěn)定地運行,而用戶在日常的工作中要進行各種各樣的操作,難免會產(chǎn)生各種各樣的誤操作和錯誤,這就打破了本系統(tǒng)的正常運行流程,可能導致預(yù)想不到的后果。因此,在本系統(tǒng)的設(shè)計過程中,我們將預(yù)先考慮各種各樣的誤操作及后果,采取相應(yīng)的預(yù)防措施,確保不產(chǎn)生災(zāi)難性的后果,保證系統(tǒng)的健壯性。良好的適應(yīng)性:系統(tǒng)必須具有良好的擴展能力和修改方便的特點,以適應(yīng)不同的變化。只有建立了穩(wěn)定的模型和良好的數(shù)據(jù)接口,才能保證系統(tǒng)具有良好的適應(yīng)性。界面友好:用戶界面