基于TCP的網絡通信協(xié)議設計論文.doc_第1頁
基于TCP的網絡通信協(xié)議設計論文.doc_第2頁
基于TCP的網絡通信協(xié)議設計論文.doc_第3頁
基于TCP的網絡通信協(xié)議設計論文.doc_第4頁
基于TCP的網絡通信協(xié)議設計論文.doc_第5頁
已閱讀5頁,還剩67頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

畢業(yè)設計(論文)題 目: 基于tcp的網絡 通信協(xié)議設計 學 院: 計算機科學學院 專業(yè)班級: 網絡工程10級1班 指導教師: 薛文生 職稱: 副教授 學生姓名: 劉小芳 學 號: 41009040127 畢業(yè)設計(論文)題 目: 基于tcp的網絡 通信協(xié)議設計 學 院: 計算機科學學院 專業(yè)班級: 網絡工程10級1班 指導教師: 薛文生 職稱: 副教授 學生姓名: 劉小芳 學 號: 41009040127 摘 要 在網絡越來越發(fā)達的今天,人們對網絡的依賴越來越多,越來越離不開網絡,由此而產生的即時通訊工具也越來越多,而網絡中不同的工作站、服務器之間能通訊,源于協(xié)議的存在。協(xié)議的設計可以實現(xiàn)交流的高效與安全。本文主要對即時通訊軟件的協(xié)議的設計,從而為用戶提供一個可靠的、專業(yè)的網上交流平臺。 本次畢業(yè)設計是采用客戶端/服務器架構模式,模擬現(xiàn)有網絡通信協(xié)議,運用了計算機網絡的基礎知識如:tcp,多線程以及windows socket等,設計的一款簡單的應用層網絡通信協(xié)議。本系統(tǒng)是在tcp之上,采用visual c+ 6.0開發(fā)平臺,基于mfc框架提供的windows socket編程機制設計,運用dialog based組件構建界面,使用了 c+面向對象的技術和面向對象的設計原則,使用vc+語言編寫。客戶端與服務器端通過socket傳送消息。服務器端設計與實現(xiàn)過程中,采用了多線程技術,可以在單個程序當中同時運行多個不同的線程,從而實現(xiàn)多客戶端聊天,大大增強了程序對服務器資源的利用和客戶的等待是時間??蛻舳伺c客戶端以及客戶端與服務器端采用事先約定好的數(shù)據結構作為傳輸數(shù)據結構,以便于客戶端和服務器端順利通信??蛻糁g的通信經由服務器處理之后轉發(fā),服務器端對數(shù)據進行簡單校驗,以實現(xiàn)客戶端之間的點對點通信。關鍵詞:協(xié)議,即時通訊,多線程abstracttoday, network is more and more developed, and people are more and more dependent on network, nearly are not inseparable from the network.so there are more and more tools of communication, but,as we all know between different workstations, servers, wantting to communicate, due to the existence of the protocol .the protocol can help achieve high efficiency and security communication.in this paper, it is mainly about a protocol design for instant messaging to provide users with a reliable, professional online communication platform.this graduation design uses the client/server architecture model, simulate the existing network communication protocols, and use the basic knowledge of computer network such as tcp, multithreading and windows sockets and so on .the design is a simple network communication protocol of application layer.this system is based on tcp, and uses the visual c + + 6.0 platform, takes advantages of the mfc framework which provids the windows socket programming mechanism design, makes uses of dialog -based components to build interface, and utilize the c+ object offers the class design principles, and uses vc + + language.client and server through socket establish the connection.in the project ,the design of the server takes advantagea of the multithreading technology, so can support to run a number of different threads in the midst of a single program, so as to realize multiple clients to run at the same time , it greatly enhance the using rate of the server resources and the clients waiting time .the client and the client , the client and the server use the pre-arranged data structure as the receiving data and the dispatching data, so that the client and server communication smoothly.clients communication between the server, after received a data package, it firstly makes a simpe processing ,then putforwards ,so that realizing the point-to-point communication between clients.key words: protocol,instant messagint,multithreading目錄abstractiv第一章 緒 論11.1 項目開發(fā)背景和意義11.2 開發(fā)和運行環(huán)境2第二章 開發(fā)工具簡介32.1 visual c+6.0介紹32.2 mfc32.3 msdn42.4 visual assist x4第三章 協(xié)議設計涉及知識簡介63.1 即時通訊63.2 網絡協(xié)議73.3 osi七層網絡模型73. 4 tcp/ip協(xié)議83.5 tcp傳輸83.6 c/s編程模型93.7 socket套接字103.8 網絡字節(jié)順序103.9 windows sockets113.10 同步、異步、阻塞和非阻塞123.11 多線程12第四章 需求分析144.1 整體需求分析144.2 可行性分析14第五章 概要設計155.1 性能要求155.2 通訊協(xié)議格式設計155.3 軟件工作模式圖165.4 軟件設計原理16第六章 詳細設計196.1 協(xié)議設計196.2 服務器端工程設計216.3 客戶端工程設計266.4多線程設計(一臺服務器與多個客戶端通信)356.5 協(xié)議工作設計38第七章 系統(tǒng)測試467.1 測試目的467.2 測試要求467.3 測試方法467.4 系統(tǒng)測試47總 結59致 謝60參考文獻61第一章 緒論第一章 緒 論1.1 項目簡介1.1.1 項目開發(fā)背景和意義 計算機網絡技術的飛速發(fā)展,使得人類社會正全面邁向信息化。近幾年來,信息網絡更是以前所未有的速度不斷發(fā)展壯大,廣泛應用于人類的生產、生活、學習和娛樂等各個領域,極大地促進了人類社會的進步。即時通訊作為目前的主要應用之一,已經極大的融入到我們生活的各個領域。 即時通信是一個終端連往一個即時通信網路的服務。即時通信不同于e-mail在于它的交談是實時的。大部分的即時通信服務提供了presence awareness的特性顯示聯(lián)絡人名單,聯(lián)絡人是否在在線與能否與聯(lián)絡人交談。 即時通信(instant message),由于其具有實時性、跨平臺性、成本低、效率高等優(yōu)點而受到廣泛的使用。即時通訊軟件的迅速發(fā)展已經突破了作為技術工具的極限,被認為是現(xiàn)代交流方式的象征。在網絡通訊時,必須選用正確的網絡通訊協(xié)議,以保證不同連接方式和操作系統(tǒng)的計算機之間可以進行數(shù)據傳輸。如何讓通訊雙方更決捷有效安全地溝通,就成為大家關心的問題。一個良好的協(xié)議設計可以很好的解決這個問題。一個良好的協(xié)議設計可以很好的解決這個問題。 我們知道,并且大家也都在用,qq,微信,飛信,msn,yy等眾多的即時通訊軟件,已經成為了目前大家交流必不可少的工具,然而這些聊天工具雖然方便、實用,但是,由于其功能太多,如游戲,社區(qū),電子郵件等功能,占據內存空間過大,從一定程度上來說,更多的已經演變成了一種娛樂工具,不能作為即時通訊的專用工具。簽于此,一個簡單友好的即時通訊的網絡聊天工具的開發(fā)就顯得必不可少了,而我們知道,網絡通訊少不了相應的軟件協(xié)議的支持,我們本次的設計目標就是設計一個專用于支持內容簡單,占用內存小的計算機之間即時通訊的網絡聊天協(xié)議。 本系統(tǒng)使用當前流行的mfc框架,c+語言編寫,采用面向對象的思想設計,基于tcp傳輸控制協(xié)議。切實考慮大眾用戶的需求,為方便用戶之間的溝通,為大家提供了一個簡單的用以支持即時通訊的網絡聊天協(xié)議。 本文首先對本次協(xié)議設計所用的開發(fā)平臺以及開發(fā)工具做了簡單介紹, 其次又對開發(fā)中所用到的知識點做了系列概括,接著是需求分析,在此基礎上那個提出了對軟件協(xié)議設計的設計方案,然后分析了協(xié)議的各類型字段,最后講了該協(xié)議的具體實現(xiàn)。 網絡協(xié)議一直以來作為信息網絡的核心支柱之一。近年來,網絡的新概念新方法、新技術以驚人的速度不斷涌現(xiàn),軟硬件不斷升級換代,新的產品和業(yè)務更是層出不窮出不窮,令人目不暇接,網絡協(xié)議更是不斷完善,以來更好的為信息化社會服務。不難發(fā)現(xiàn),網絡技術如同自然界的生物一樣,是一個新舊更替,優(yōu)勝劣汰的發(fā)展過程。陳舊落后的技術不論是網絡協(xié)議還是其他,必然被新的,更加先進的技術所替代。作為網絡工程系的學生,必須在打牢網絡理論基礎,不斷更新學習各種網絡新技術的同時,并且能夠把學到的理論知識應用于實踐中去,以便于深入理解網絡體系結構和運行機制,切實掌握各種網絡技術的基本原理、軟、硬件設計方法和相關協(xié)議以及算法。而本次設計就是針對這一目標,結合本人在大學四年的理論學習和各種實踐,對網絡協(xié)議一次模擬設計,及時對本人大學學習情況的考察,也是自己對自己在大學所學知識的一次系統(tǒng)整疊和梳58西安工程大學學士學位論文理,更是對自己的一次鍛煉。1.1.2 開發(fā)和運行環(huán)境 操作系統(tǒng):win7編輯和運行平臺:visual c + + 6.0編碼語言:mfc協(xié)助軟件:msdn, visual assist x 第二章 開發(fā)工具簡介第二章 開發(fā)工具簡介2.1 visual c+6.0介紹2.1.1 特色visual c+6.0由microsoft開發(fā), 它不僅是一個c+編譯器,而且是一個基于windows操作系統(tǒng)的可視化集成開發(fā)環(huán)境(integrated development environment,ide)。visual c+6.0由許多組件組成,包括編輯器、調試器以及程序向導appwizard、類向導class wizard等開發(fā)工具。 這些組件通過一個名為developer studio的組件集成為和諧的開發(fā)環(huán)境。microsoft的主力軟件產品。visual c+是一個功能強大的可視化軟件開發(fā)工具。visual c+6.0以擁有“語法高亮”,自動編譯功能以及高級除錯功能而著稱。比如,它允許用戶進行遠程調試,單步執(zhí)行等。還有允許用戶在調試期間重新編譯被修改的代碼,而不必重新啟動正在調試的程序。其編譯及創(chuàng)建預編譯頭文件(stdafx.h)、最小重建功能及累加連結(link)著稱。這些特征明顯縮短程序編輯、編譯及連結的時間花費,在大型軟件計劃上尤其顯著。2.1.2缺點由于c+是由c語言發(fā)展起來的,也支持c語言的編譯。6.0版本是使用最多的版本,很經典。最大的缺點是對于模版的支持比較差?,F(xiàn)在最新補丁為sp6,推薦安裝,否則易出現(xiàn)編譯時假死狀態(tài)。僅支持windows操作系統(tǒng)。目前發(fā)現(xiàn)與windows 7兼容性不好,安裝成功后可能會出現(xiàn)無法打開cpp文件的現(xiàn)象。2.2 mfc2.2.1 mfc簡介 mfc(microsoftfoundationclasses),是微軟公司提供的一個基礎類(microsoft foundation classes),以c+類的形式封裝了windows的api,并且包含一個應用程序框架,以減少應用程序開發(fā)人員的工作量。其中包含的類包含大量windows句柄封裝類和很多windows的內建控件和組件的封裝類。 mfc應用程序的總體結構通常由開發(fā)人員從mfc類派生的幾個類和一個cwinapp類對象(應用程序對象)組成。mfc 提供了mfc appwizard 自動生成框架。windows 應用程序中,mfc的主要文件為“afxwin.h”.mfc實際上是微軟提供的,用于在c+環(huán)境下編寫應用程序的一個框架和引擎。vc+是windows下開發(fā)人員使用的專業(yè)c+ sdk(sdk,standard software develop kit,專業(yè)軟件開發(fā)平臺),mfc就是掛在它之上的一個輔助軟件開發(fā)包。mfc作為與vc+血肉相連的部分。只不過mfc類是微軟為vc+專配的。mfc是winapi與c+的結合。api,即微軟提供的windows下應用程序的編程語言接口,是一種軟件編程的規(guī)范,但不是一種程序開發(fā)語言本身,可以允許用戶使用各種各樣的第三方的編程語言來進行對windows下應用程序的開發(fā),使這些被開發(fā)出來的應用程序能在windows下運行。編程語言函數(shù)本質上全部源于api,因此用它們開發(fā)出來的應用程序都能工作在windows的消息機制和繪圖里,遵守windows作為一個操作系統(tǒng)的內部實現(xiàn)。mfc是微軟對api函數(shù)的專用c+封裝,這種結合一方面讓用戶使用微軟的專業(yè)c+ sdk來進行windows下應用程序的開發(fā)變得容易,因為mfc是對api的封裝,微軟做了大量的工作,隱藏了好多程序開發(fā)人員在windows下用c+ & mfc編制軟件時的大量內節(jié),如應用程序實現(xiàn)消息的處理、設備環(huán)境繪圖,這種結合是以方便為目的的,必定要付出一定代價,因此就造成了mfc對類封裝中的一定程度的的冗余和迂回,但這是可以接受的。 mfc不只是一個功能單純的界面開發(fā)系統(tǒng),它提供的類絕大部分用來進行界面開發(fā),關聯(lián)一個窗口的動作,但它提供的類中有好多類不與一個窗口關聯(lián),即類的作用不是一個界面類,不實現(xiàn)對一個窗口對象的控制(如創(chuàng)建、銷毀),而是一些在windows中實現(xiàn)內部處理的類,如數(shù)據庫的管理類等。 windows作為一個提供功能強大的應用程序接口編程的操作系統(tǒng),因為api函數(shù)實在太多了,而且名稱很亂,從零構架一個窗口動輒就是上百行的代碼。mfc是面向對象程序設計與application framework的完美結合,它將傳統(tǒng)的api進行了分類封裝,創(chuàng)建了程序的一般框架。windows作為一個提供功能強大的應用程序接口編程的操作系統(tǒng),因為api函數(shù)實在太多了,而且名稱很亂,從零構架一個窗口動輒就是上百行的代碼。mfc是面向對象程序設計與application framework的完美結合,它將傳統(tǒng)的api進行了分類封裝,創(chuàng)建了程序的一般框架。2.3 msdn2.3.1 msdn 簡介msdn(microsoft developer network)是早期微軟在推廣win32 程序設計以及開發(fā)工具時,專門為開發(fā)人員所提供的一個服務,是使用微軟技術開發(fā)軟件或應用程序時必定會參訪的地方,同時它也有提供訂閱的服務,由微軟不定時供應最新的軟件及技術文件,msdn的技術文件庫是免費開放讓所有人在聯(lián)機閱讀,但光盤的版本必須要利用msdn library subscription才可以拿到,不過自從visual studio 2005開始,msdn library即提供免費的網絡下載。也許是受到msdn成功與廣為開發(fā)人員所知的影響,升陽也將它們的java文件庫定名為sun developer network (sdn)一般情況下,很多人誤認為 msdn 為聯(lián)機幫助文件和技術文獻的集合。但事實上,這兩者只占 msdn 龐大計劃的一小部分。產品下載、在線電子教程、msdn 雜志和技術緊急電話支援是要付費的,其余基本免費。2.4 visual assist x 2.4.1 visual assist x 簡介visual assist x是一款非常好的microsoft visual studio 2005和visual studio .net插件,支持c/c,c,asp,visual basic,java和html等語言,能自動識別各種關鍵字、系統(tǒng)函數(shù)、成員變量、自動給出輸入提示、自動更正大小寫錯誤、自動標示錯誤等,有助于提高開發(fā)過程的自動化和開發(fā)效率。第三章 協(xié)議設計涉及知識簡介 第三章 協(xié)議設計涉及知識簡介3.1 即時通訊3.1.1 簡介即時通訊(instant messenger,簡稱im),im最早的創(chuàng)始人是三個以色列青年,是他們在1996年開發(fā)出來的,取名叫icq。是一個終端服務,允許兩人或多人使用網路即時的傳遞文字訊息、檔案、語音與視頻交流。即時通訊按使用用途分為企業(yè)即時通訊和網站即時通訊,根據裝載的對象又可分為手機即時通訊和pc即時通訊,手機即時通訊代表是短信,網站、視頻即時通訊如:米聊、yy語音、qq、msn、百度hi、新浪uc、阿里旺旺、網易泡泡、網易cc、盛大et、移動飛信、企業(yè)飛信等應用形式。3.1.2 行業(yè)分析據最新的報告顯示,2008年中國企業(yè)即時通訊市場終端用戶規(guī)模達到2236萬人,與2007年的1813萬人相比,同比增長23.3%。已經開始全面入市場,競爭格局也已經初顯端倪,主要以高效、穩(wěn)定和安全作為其產品開發(fā)的重點。3.1.3 即時通訊的新發(fā)展(1)由pc即時通信向手機客服端轉移由pc即時通信向手機客服端轉移,具有以下特點:省錢,方便,可靠,超強,夠酷,時尚,環(huán)保,驚喜,厲害。(2)網頁即時通訊新趨勢a.論壇、sns社區(qū):滿足論壇、社區(qū)的注冊用戶和游客即時通訊的需求,可以提高用戶的活躍度。b.垂直門戶、電子商務:滿足網站訪客進行話題討論、咨詢的需求,可以提高用戶停留時間。c.游戲、客戶端軟件:按需求提供im定制服務,有效降低im開發(fā)成本。完全基于網頁的即時通訊a.無需下載、安裝客戶端軟件。b.聊天記錄無論在哪臺電腦上都可以查看。c.可以和社區(qū)網站無縫結合,進一步提高用戶之間的交流互動。3.1.4 安全問題目前,即時通訊的主要挑戰(zhàn)是安全,安全威脅包括:id被盜、隱私威脅、病毒威脅等,下面是即時通訊用戶應該遵循的一些安全準則,以保護自身的網絡安全和隱私。即時通訊安全準則主要包括:不隨意泄露即時通訊的用戶名和密碼;不在第三方網站登錄網頁版即時通訊軟件;定期更改密碼;謹慎使用未經認證的即時通訊插件;在即時通訊設置中開啟文件自動傳輸病毒掃描選項;不接收來歷不明或可疑的文件和網址鏈接。3.2 網絡協(xié)議3.2.1定義協(xié)議是用來描述進程之間信息交換數(shù)據時的規(guī)則術語義。在計算機網絡中,兩個相互通信的實體處在不同的地理位置,其上的兩個進程相互通信,需要通過交換信息來協(xié)調它們的動作達到同步,而信息的交換必須按照預先共同約定好的規(guī)則進行。網絡協(xié)議的定義:為計算機網絡中進行數(shù)據交換而建立的規(guī)則、標準或約定的集合。3.1.2 網絡協(xié)議是由三個要素組成a.語義:語義是解釋控制信息每個部分的意義,它規(guī)定了需要發(fā)出何種控制信息,以及完成的動作與做出什么樣的響應。b.語法:語法是用戶數(shù)據與控制信息的結構與格式,以及數(shù)據出現(xiàn)的順序。c.時序:時序是對事件發(fā)生順序的詳細說明。(也可稱為“同步”)。人們形象地把這三個要素描述為:語義表示要做什么,語法表示要怎么做,時序表示做的順序。3.3 osi七層網絡模型3.3.1osi七層模型簡介osi網絡模型是一個開放式系統(tǒng)互聯(lián)的參考模型。通過這個參考模型,用戶可以非常直觀地了解網絡通信的基本過程和原理。osi參考模型如圖所示。用戶從osi網絡模型可以很直觀地看到,網絡數(shù)據從發(fā)送方到達接收方的過程中,數(shù)據的流向以及經過的通信層和相應的通信協(xié)議。事實上在網絡通信的發(fā)送端,其通信數(shù)據每到一個通信層,都會被該層協(xié)議在數(shù)據中添加一個包頭數(shù)據。而在接收方恰好相反,數(shù)據通過每一層時都會被該層協(xié)議剝去相應的包頭數(shù)據。用戶也可以這樣理解,即網絡模型中的各層都是對等通信。在osi七層網絡模型中,各個網絡層都具有各自的功能,如表所示。各網絡層的功能協(xié) 議 層 名功 能 概 述物理硬件層表示計算機網絡中的物理設備。常見的有計算機網卡等數(shù)據鏈路層將傳輸數(shù)據進行壓縮與加壓縮網絡層將傳輸數(shù)據進行網絡傳輸數(shù)據傳輸層進行信息的網絡傳輸會話層建立物理網絡的連接表示層將傳輸數(shù)據以某種格式進行表示應用層應用程序接口%注意:在表1.1中列出了osi七層網絡模型中各層的基本功能概述。用戶根據這些基本的功能概述會對該網絡模型有一個比較全面的認識。3. 4 tcp/ip協(xié)議3.4.1 tcp/ip協(xié)議簡介tcp/ip協(xié)議實際上是一個協(xié)議簇,其包括了很多協(xié)議。例如,ftp(文本傳輸協(xié)議)、smtp(郵件傳輸協(xié)議)等應用層協(xié)議。tcp/ip協(xié)議的網絡模型只有4層,包括數(shù)據鏈路層、網絡層、數(shù)據傳輸層和應用層,各層功能如下: tcp/ip網絡協(xié)議各層功能協(xié) 議 層 名功 能 概 述數(shù)據鏈路層網卡等網絡硬件設備以及驅動程序網絡層ip協(xié)議等互聯(lián)協(xié)議數(shù)據傳輸層為應用程序提供通信方法,通常為tcp、udp協(xié)議應用層負責處理應用程序的實際用于層協(xié)議在數(shù)據傳輸層中,包括了tcp(transmission control protocol)和udp(user datagram protocol)協(xié)議。其中,tcp協(xié)議是基于面向連接的可靠的通信協(xié)議。其具有重發(fā)機制,即當數(shù)據被破壞或者丟失時,發(fā)送方將重發(fā)該數(shù)據。而udp協(xié)議是基于用戶數(shù)據報協(xié)議,屬于不可靠連接通信的協(xié)議。例如,當用戶使用udp協(xié)議發(fā)送一條消息時,并不知道該消息是否已經到達接收方,或者在傳輸過程中數(shù)據已經丟失。但是在即時通信中,udp協(xié)議在對一些對時間要求較高的網絡數(shù)據傳輸方面有著重要的作用。3.5 tcp傳輸3.5.1簡介tcp,transfer control protocol的縮寫(傳輸控制協(xié)議),是一種面向連接的網絡傳輸協(xié)議。tcp協(xié)議的特點是,支持多數(shù)據流操作,提供流控和錯誤控制,甚至能完成對亂序到達報文的重新排序等。因此,tcp提供了可靠的應用數(shù)據傳輸服務。3.5.2通信雙方使用tcp傳輸?shù)囊话氵^程如圖:3.5.3 tcp協(xié)議和udp協(xié)議的區(qū)別(1)tcp協(xié)議面向連接,udp協(xié)議面向非連接(2)tcp協(xié)議傳輸速度慢,udp協(xié)議傳輸速度快(3)tcp協(xié)議保證數(shù)據順序,udp協(xié)議不保證(4)tcp協(xié)議保證數(shù)據正確性,udp協(xié)議可能丟包(5)tcp協(xié)議對系統(tǒng)資源要求多,udp協(xié)議要求少3.6 c/s編程模型客戶機/服務器模型,又稱為client/server模型,簡稱c/s架構,是一種非對稱式編程模式。c/s計算技術在信息產業(yè)當中占有重要的地位。該模式的基本思想是把集中在一起的應用劃分成為功能不同的兩個部分,分別在不同的計算機上運行,通過它們之間的分工合作來實現(xiàn)一個完整的功能。對于這種模式而言其中一部分需要作為服務器,用來響應并為客戶提供固定的服務;另一部分則作為客戶機程序用來向服務器提出請求或要求某種服務。 在此“服務器”是指能在網絡上提供服務的任何程序。服務器接受網絡上的請求,完成服務后將結果返回給申請者。對于簡單的服務,把每個請求用一個ip數(shù)據報發(fā)給服務器,服務器用另一個數(shù)據報返回響應。客戶機和服務器都是獨立的計算機。當一臺連入網絡的計算機向其他計算機提供各種網絡服務(如數(shù)據、文件的共享等)時,它就被叫做服務器。而那些用于訪問服務器資料的計算機則被叫做客戶機。嚴格說來,客戶機/服務器模型并不是從物理分布的角度來定義,它所體現(xiàn)的是一種網絡數(shù)據訪問的實現(xiàn)方式。采用這種結構的系統(tǒng)目前應用非常廣泛。如賓館、酒店的客房登記、結算系統(tǒng),超市的pos系統(tǒng),銀行、郵電的網絡系統(tǒng)等。c/s編程模型是基于可靠連接的通信模型。在通信的雙方必須使用各自的ip地址以及端口進行通信。否則,通信過程將無法實現(xiàn)。通常情況下,當用戶使用c/s模型進行通信時,其通信的任意一方稱為客戶端,則另一方稱為服務器端。服務器端等待客戶端連接請求的到來,這個過程稱為監(jiān)聽過程。通常,服務器監(jiān)聽功能是在特定的ip地址和端口上進行。然后,客戶端向服務器發(fā)出連接請求,服務器響應該請求則連接成功。否則,客戶端的連接請求失敗。c/s編程模型如圖所示: c/s編程模型由于客戶端連接服務器時,需要使用服務器的ip地址和監(jiān)聽端口號才能完成連接。所以,服務器的ip地址和端口必須是固定的。在這里,向用戶介紹部分協(xié)議所使用的端口號碼。例如,http協(xié)議(網頁瀏覽服務)所使用的端口號為80,ftp協(xié)議(文本傳輸)所使用的端口號是21。注意:用戶在實際編程中,通信雙方的連接以及數(shù)據通信均是基于socket(套接字)進行的。3.7 socket套接字用戶在windows中編寫網絡通信程序時,需要使用windows socket(windows套接字)。與windows套接字相關的api函數(shù)稱為winsock函數(shù)。在網絡通信的雙方,均有各自的套接字,并且該套接字與特定的ip地址和端口號相關聯(lián)。通常,套接字主要有兩種類型,分別是流式套接字(sock_stream)和數(shù)據報套接字(sock_dgram)。其中,流式套接字是專門用于使用tcp協(xié)議通信的應用程序中,而數(shù)據報套接字則是專門用于使用udp協(xié)議進行通信的應用程序中。3.8 網絡字節(jié)順序網絡字節(jié)順序是指tcp/ip協(xié)議中規(guī)定的數(shù)據傳輸使用格式,與之相對的字節(jié)順序是主機字節(jié)順序。網絡字節(jié)順序表示首先將數(shù)據中最重要的字節(jié)進行存儲。例如,當數(shù)據0x358457使用網絡字節(jié)順序進行存儲時,該值在內存中的存放順序將是0x35、0x84、0x57。因為通信數(shù)據可能會在不同的機器之間進行傳輸,所以通信數(shù)據必須以相同的格式進行整理。只有經過格式處理的通信數(shù)據,才能在不同的機器之間進行傳輸。3.9 windows sockets在mfc類庫中,幾乎封裝了windows sockets的全部功能。在本節(jié)中,將向用戶介紹兩個主要的套接字相關類,分別是casyncsocket類和csocket類。3.9.1 casyncsocket類在微軟基礎類庫中,casyncsocket類封裝了異步套接字的基本功能。用戶使用該類進行網絡數(shù)據傳輸?shù)牟襟E如下:(1)調用構造函數(shù)創(chuàng)建套接字對象。(2)如果創(chuàng)建服務器端套接字,則調用函數(shù)bind()綁定本地ip和端口,然后調用函數(shù)listen()監(jiān)聽客戶端的請求。如果請求到來,則調用函數(shù)accept()響應該請求。如果創(chuàng)建客戶端套接字,則直接調用函數(shù)connect()連接服務器即可。(3)調用send()等功能函數(shù)進行數(shù)據傳輸與處理。(4)關閉或銷毀套接字對象。注意:在mfc中,所有類中均有一個變量m_hwnd表示該類的實例句柄。3.9.2 csocket類微軟的mfc提供了兩個類:casyncsocket和csocket,極大地方便了socket功能的使用。這兩個類的繼承關系如圖: mfc socket類的繼承關系csocket類派生于casyncsocket類。該類不但具有casyncsocket類的基本功能,還具有串行化功能。用戶在實際編程中,通過將csocket類與csocketfile類和carchive類一起使用,能夠很好地管理數(shù)據以及發(fā)送數(shù)據。用戶使用該類進行網絡編程的步驟如下: (1)創(chuàng)建csocket類對象。(2)如果創(chuàng)建服務器端套接字,則調用函數(shù)bind()綁定本地ip和端口,然后調用函數(shù)listen()監(jiān)聽客戶端的請求。如果請求到來,則調用函數(shù)accept()響應該請求。如果創(chuàng)建客戶端套接字,則直接調用函數(shù)connect()連接服務器即可。(3)創(chuàng)建與csocket類對象相關聯(lián)的csocketfile類對象。(4)創(chuàng)建與csocketfile類相關聯(lián)的carchive對象。(5)使用carchive類對象在客戶端和服務器之間進行數(shù)據傳輸。(6)關閉或銷毀csocket類、csocketfile類和carchive類的3個對象。3.10 同步、異步、阻塞和非阻塞 同步(synchronous):所謂同步方式,就是發(fā)送方發(fā)送數(shù)據包以后,不等接受方響應,就接著發(fā)送下一個數(shù)據包。異步(asynchronous):異步方式就是當發(fā)送方發(fā)送一個數(shù)據包以后,一直等到接受方響應后才接著發(fā)送下一個數(shù)據包。阻塞(block):指執(zhí)行此套接字的網絡調用時,直到調用成功才返回,否則此套節(jié)字就一直阻塞在網絡調用上,比如調用streamreader 類的readlin ( )方法讀取網絡緩沖區(qū)中的數(shù)據,如果調用的時候沒有數(shù)據到達,那么此readlin ( )方法將一直掛在調用上,直到讀到一些數(shù)據,此函數(shù)調用才返回非阻塞(unblock):指在執(zhí)行此套接字的網絡調用時,不管是否執(zhí)行成功,都立即返回。同樣調用streamreader 類的readlin ( )方法讀取網絡緩沖區(qū)中數(shù)據,不管是否讀到數(shù)據都立即返回,而不會一直掛在此函數(shù)調用上。在windows網絡通信軟件開發(fā)中,最為常用的方法就是異步非阻塞套接字。平常所說的c/s(客戶端/服務器)結構的軟件采用的方式就是異步非阻塞模式的。3.11 多線程3.11.1 概念每個正在系統(tǒng)上運行的程序都是一個進程。每個進程包含一到多個線程。進程也可能是整個程序或者是部分程序的動態(tài)執(zhí)行。線程是一組指令的集合,或者是程序的特殊段,它可以在程序里獨立執(zhí)行。也可以把它理解為代碼運行的上下文。所以線程基本上是輕量級的進程,它負責在單個程序里執(zhí)行多任務。通常由操作系統(tǒng)負責多個線程的調度和執(zhí)行。線程是程序中一個單一的順序控制流程.在單個程序中同時運行多個線程完成不同的工作,稱為多線程.3.11.2 線程和進程的區(qū)別在于子進程和父進程有不同的代碼和數(shù)據空間,而多個線程則共享數(shù)據空間,每個線程有自己的執(zhí)行堆棧和程序計數(shù)器為其執(zhí)行上下文.多線程主要是為了節(jié)約cpu時間,發(fā)揮利用,根據具體情況而定. 線程的運行中需要使用計算機的內存資源和cpu。3.11.3 多線程處理的優(yōu)點多線程技術使程序的響應速度更快,因為用戶界面可以在進行其他工作的同時一直處于活動狀態(tài)。 (1)當前沒有進行處理的任務可以將處理器時間讓給其他任務。 (2)占用大量處理時間的任務可以定期將處理器時間讓給其他任務。 (3)可以隨時停止任務(4)可以分別設置各個任務的優(yōu)先級以優(yōu)化性能。 (5)是否需要創(chuàng)建多線程應用程序取決于多個因素。在以下情況下,最適合采用多線程處理: (6)耗時或大量占用處理器的任務阻塞用戶界面操作。 (7)各個任務必須等待外部資源(如遠程文件或 internet 連接)。 3.11.4 線程缺點(1)如果有大量的線程,會影響性能,因為操作系統(tǒng)需要在它們之間切換。(2)更多的線程需要更多的內存空間。(3)線程可能會給程序帶來更多“bug”,因此要小心使用。(4)線程的中止需要考慮其對程序運行的影響。(5)通常塊模型數(shù)據是在多個線程間共享的,需要防止線程死鎖情況的發(fā)生。3.11.5 線程同步是多線程編程的難點,在多線程應用中,考慮不同線程之間的數(shù)據同步和防止死鎖。當兩個或多個線程之間同時等待對方釋放資源的時候就會形成線程之間的死鎖。為了防止死鎖的發(fā)生,需要通過同步來實現(xiàn)線程安全。mfc中線程的同步最常用的四種同步對象:(1)臨界區(qū)(ccriticalsection)(2)事件(cevent)(3)互斥量(cmutex)(4)信號量(csemaphore)9第四章 需求分析第四章 需求分析4.1 整體需求分析隨著社會的發(fā)展,計算機網絡日新月異,人們的交流方式越來越多,傳統(tǒng)的交流方式,如:email,電話等已經受到了挑戰(zhàn),利用網絡免費,及時的和好友取得聯(lián)系已經成為通信的必然趨勢。因此出現(xiàn)了qq,微信等聊天工具。然而這些聊天工具雖然方便、實用,但是,由于其功能太多,如游戲,社區(qū),電子郵件等功能,占據內存空間過大,從一定程度上來說,更多的已經演變成了一種娛樂工具,不能作為即時通訊的專用工具。簽于此,一個內容簡單,消耗內存小,友好簡潔的即時通訊的網絡聊天工具的開發(fā)就顯得必不可少了,而我們知道,網絡通訊少不了相應的通信協(xié)議的支持,所以設計一個專用于支持計算機之間即時通訊的網絡聊天協(xié)議就顯得必不可少。4.2 可行性分析4.2.1 技術可行性visual c+ 6.0提供了功能強大的開發(fā)平臺,編碼,調試和運行于一體,使得程序界面的實現(xiàn)簡單、快速、標準。mfc提供了簡單易用的框架,用其進行前臺設計,方便簡單。winsock為windows網絡編程提供了豐富的接口技術,結合多線程技術,使得此處的基于tcp網絡編程具有良好的健壯性和強大的可擴展性。同時,msdn library為編碼提供了大量可直接調用的函數(shù),為編碼的是吸納提供了很大的方便,在mfc編碼過程中,visual assist x具有代碼輸入更迅速,錯誤自動校正,信息獲取更加快速,增加了色彩和格式,拼寫檢查,拓展了基本編輯等功能,具有強大的編輯特色,增強microsoft開發(fā)環(huán)境下的編輯能力,提高了生產效率。本軟件最后所生成的.exe可執(zhí)行文件具有很好的可移植性。4.2.2 經濟可行性經濟可行性研究主要是預估費用支出和對項目的經濟效益進行評價,由于本系統(tǒng)的主要背景是畢業(yè)課程設計,不注重直接的經濟效益和其后的發(fā)展方向,只在注重自身水平和能力的提高,對自身的經濟要求也不高,只要有一臺能運行visual c+6.0軟件的電腦便可,所以不用考慮到經濟問題。4.2.3 運行可行性本系統(tǒng)為一個小型的即時聊天系統(tǒng),所耗費的資源非常的小,現(xiàn)在一般的電腦無論是硬件還是軟件都能夠滿足條件,因此,本系統(tǒng)在運行上是可行的。綜上所述,本系統(tǒng)的設計與開發(fā)在技術上和硬件設備上的條件都是滿足的,因此,它是可行的。第五章 概要設計第五章 概要設計5.1 性能要求 隨著網絡的發(fā)展,不同的開發(fā)商開發(fā)了不同的即時通訊的應用協(xié)議。為了使通信成功可靠,網絡中的同一種即時通訊軟件,都必須使用同一語言,不能帶有方言。因而必須嚴格的定義不同用戶之間的每個包中每個字節(jié)中的每一位。這些協(xié)議絕大多數(shù)建立在tcp/ip協(xié)議族上,約定好通用的通信方式、語義、及數(shù)據格式,即即時通訊應用協(xié)議。已經開發(fā)的眾多協(xié)議中筆者認為較為成功的當屬qq、微信、淘寶旺旺等。不同的開發(fā)商因即時通訊軟件的應用重心不同,其協(xié)議的側重點也不同,且絕大多數(shù)為廠商保密。本協(xié)議的設計旨在開發(fā)一開放的、安全的、可擴展的、易于程序開發(fā)的即使通訊軟件協(xié)議。5.1.1在設計即時通訊協(xié)議時,筆者認為有幾點必須考慮:(1) 協(xié)議對下層協(xié)議的支持考慮到程序開發(fā)者對下層協(xié)議選擇上有不同的看法,協(xié)議設計時必須考慮下層的協(xié)議,以便程序開發(fā)者根據不同的下層協(xié)議運用不同的傳輸手段。(2)數(shù)據的保密由于即時通訊軟件的不同需求,開發(fā)者可能要對傳輸?shù)臄?shù)據進行加密,因此在協(xié)議中應該對數(shù)據是否加密、加密算法留有標記。本次協(xié)議設計未實現(xiàn)這一點。(3) 傳輸可靠性:由于網絡傳輸?shù)牟环€(wěn)定性,根據經驗大于1024byte的包較小于1024byte的包更易丟失,因此在應用層傳給傳輸層的包應小于1000byte,而實際的數(shù)據包往往大于1000byte,因此應在協(xié)議中留有分篇傳輸?shù)奈?本次設計也未能實現(xiàn)這一點,只是通過限制傳輸?shù)臄?shù)據來機械的控制了這一點。(4)協(xié)議的通用性與可擴展性:由于無法對新技術的發(fā)展有精確的把握應在協(xié)議中留有冗余位,以便適應新的應用。(5)協(xié)議的簡潔高效性:協(xié)議的設計不應過于復雜,應給程序員開發(fā)程序留有”自由空間”。5.2 通訊協(xié)議格式設計5.2.1協(xié)議字段設計圖示此通訊協(xié)議具體格式,包括判斷消息屬于哪個類型、消息發(fā)送者、消息接收者、發(fā)送數(shù)據、消息長度共5部分,其字節(jié)分配如圖所示與表示的含義:標識funsender28recerverid28connect1024len數(shù)據類型enum(fun)char char char int含義消息類型發(fā)送者接受者發(fā)送數(shù)據消息長度長度(byte)42828102445.2.2協(xié)議字段設計說明西安工程大學學士學位論文(1) fun功能標識定義為枚舉類型(enum),占4個byte。用它來聲明一組命名的常數(shù),當一個變量有幾種可能的取值時,可以將它定義為枚舉類型,在win32機器上,枚舉類型所占字節(jié)數(shù)總是4byte,在上面代碼片段中sizeof(enum),;sizeof(fun),sizeof(login)都是4byte。(2) fun分別包括login,logout,logok,logerr,shake,transmit,svrstop,errl。llogin表示用戶登錄,logout表示用戶退出,logok表示用戶登陸成功,logerr表示用戶登陸失敗,shake表示震動,transnit表示信息傳輸,srrstop表示服務器停止,err表示數(shù)據傳送出錯。(2) senderid是發(fā)送者的標識,用以標記信息的來源id;(3) recerverid是接收者的標識,用以標記信息的目的id;(4) connect是要傳輸?shù)臄?shù)據;(5) len記錄了傳輸數(shù)據的長度,用于在服務器端進行簡單校驗,如果出錯,則提醒發(fā)送者傳輸錯誤,同時直接丟棄接受到的錯誤數(shù)據,否則轉發(fā)數(shù)據給接收者;5.3 軟件工作模式圖5.4 軟件設計原理5.4.1 協(xié)議工作編程原理(1) 創(chuàng)建csocket對象,創(chuàng)建兩個csocket對象,分別為服務器端和客戶端的對象,如圖:csocket serversocket;csocket clientsocket;(2)使用csocket對象的create()函數(shù)來創(chuàng)建windows socket。同時,create()函數(shù)會自行調用bind()函數(shù)將此scoket綁定到指定的地址上面。例如:serversocket.create(5000); /服務器端需要指定一個端口號clientsocket.create(); /客戶端不用指定端口號(3)對于服務器端,需要這個socket不停地監(jiān)聽是否有來自于網絡上的鏈接請求,因此需要調用監(jiān)聽函數(shù)。例如:serversocket.listen();(4)對于客戶端,實行連接,例如:clientsocke

溫馨提示

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

評論

0/150

提交評論