版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
本科生畢業(yè)設計(論文)PAGE聊天系統(tǒng)客戶端的設計與實現摘要SOCKET是在Windows進行網絡通信編程的API接口,也是Windows網絡編程的事實標準。在網絡編程中最常用的方案便是C/S模型。本程序是一個基于C/S模式的網絡聊天程序,主要用于測試面向連接的socket編程技術。本程序使用VirtualC++6.0編寫。為方便測試,本程序采用server(服務器端)和client(客戶端)合一模式,使用簡潔方便。需要注意的是本程序C/S端合一的模式和服務器地址、服務器端口號固定以及自動申請用戶登陸ID的設計不只為了方便測試,而且適宜商業(yè)化,但是在商業(yè)化階段還是需要進行改進。本文主要是對本軟件服務器端的設計作了比較詳細的介紹,并對服務器端進行了初步的開發(fā)。而客戶端的設計有很多都需要完善。客戶端是給用戶使用的,從方便和美觀上,還都還有很多需要完善的地方。而且,由于時間關系,客戶端還有些功能沒有完全。如果要使本系統(tǒng)成為一個實際應用系統(tǒng)并在網絡上實際應用,還要再下一番功夫進行設計。關鍵詞:套接字客戶機服務器網絡聊天
ABSTRACTTheSOCKETconnectsintheAPIthattheWindowscarriesonthenetworkcorrespondenceplaitdistance,isalsothefactstandardthatthenetworkofWindowsweavesthedistance.Themostincommonuseprojectwouldbethecustomer/servermodelinnetworkweavedistance.ThistextputsforwardtocarryouttheInternetwiththeWINSOCKundercustomer/servermodelintheprojectofthefamiliarchatroomsoftware.Thisprocedureisanaccordingtocustomer/servermodeofthenetworkchatprocedure,mainlyusedforthetesttofacetothecopularsocketplaitdistance.UsetheVirtualC++6.0plaitswrite.Testfortheconvenience,theprocedureadoptionserver(theservercarry)andclient(thecustomercarry)suniteasonethemode,usingthesimpleanddirectconvenience.WhattoneedtobenoticeisthisprocedurethecustomercarrytheservercarrytouniteasoneofmodeandobtainthismachineIPaddressandautobethecustomerdebarkationIDthecalculatorautomaticallyofdesigntestfortheconvenienceonly,wellproperandcommercial,soneedtocarryontheimprovementinthecommercialstage.Thisarticlewasmainlyhasmadethequitedetailedintroductiontothissoftwareserverenddesign,andhascarriedonthepreliminarydevelopmenttotheserverend.Buttheclientsidedesignhasmanyneedstoconsummate.Theclientsideistotheusertheuse,fromconvenientandonartistic,butalsohastheplacewhichmanyneedstoconsummate.Moreover,asaresultofthetimerelationship,theclientsidealsohasafunctionnotcompletely.Ifmustmakethissystemtobecomeapracticalapplicationsystemandinthenetworkthepracticalapplication,butmustthenexttimecarryonthedesignagain.Keyword:socketclientserverThenetworkchats目錄第一章概述 11.1選題來源及意義 11.1.1選題來源 11.1.2選題意義 11.2任務、要求及問題提出 11.2.1任務、要求 11.2.2問題提出 21.3國內外發(fā)展概況 21.3.1國內外發(fā)展概況 21.3.2發(fā)展趨勢 3第二章設計原理和過程 52.1用戶需求分析 52.2設計原理概述 52.3系統(tǒng)模塊設計 62.4服務器數據庫設計 82.5客戶/服務器程序設計 92.6TCP/IP協議 11第三章詳細設計 143.1類設計總體結構 143.2服務器端底層通訊類設計 153.3客戶端底層通訊類設計 163.4客戶/服務器間通訊數據類設計 173.5服務器應用程序類設計 173.6客戶端應用程序類設計 18第四章系統(tǒng)實現 214.1系統(tǒng)環(huán)境 214.1.1系統(tǒng)軟硬環(huán)境 214.1.2系統(tǒng)安裝說明 214.1.3系統(tǒng)運行說明 224.1.4系統(tǒng)使用說明 244.2具體實現 244.2.1登錄模塊 244.2.2查找用戶模塊 244.2.3查看在線用戶模塊 264.2.4發(fā)群體消息模塊 264.2.5系統(tǒng)參數模塊 274.2.6個人設定模塊 284.2.7正常聊天模塊 284.3系統(tǒng)測試 29結論 31謝辭 32參考文獻 33附錄 34PAGE72第一章概述1.1選題來源及意義1.1.1選題來源在網絡無所不在的今天,在Internet上,有icq,oicq,ticq等網絡聊天軟件,極大程度上方便了處于在世界各地的友人之間的相互聯系,也使世界好象一下子縮小了,不管你在哪里,只要你上了網,打開這些軟件,就可以給你的朋友發(fā)信息,不管對方是否也同時在線,只要知道他有號碼。本文討論基于TCP/IP通信開發(fā)聊天程序的關鍵技術,重點討論面向對象方法以及聊天程序的實現方法,并給出了相應的VC++代碼.網絡聊天軟件在國外的有icq等,在國內的主要有騰訊的Oicq,還有Ticq,OmO和一些在網頁上的即時通訊工具,像Chinaren網站上的WebMaster等等,都做得即美觀,且功能強大,Oicq現在擁有非常大的用戶群。現在也有很多,在網絡上不使用服務器的通訊軟件,這種軟件小巧且方便,也能解決一部分問題。但是有服務器的通訊軟件,有著不可比擬的優(yōu)勢:可以發(fā)送離線消息,不管用戶當時是否在線,下次上線時,就可以看到這條消息了??梢员4嬗脩舻膫€人信息或介紹,供人查看。而且,那種通訊軟件,是以機器為通訊單元的,而這種聊天軟件是以人為通訊單元??傊?,這種軟件在網絡上,還是有很大的用途的,為網絡上通訊,帶來極大的方便。雖然說,現在這個軟件已經有公司把它開發(fā)出來了,我再做也不一定有新意,也未必可以做得更好,但作為畢業(yè)設計,也算是對我能力的一個考驗和這四年來我學習知識的一個檢查。如果這個軟件做得比較成功的話,能為網絡通訊帶來一定的方便的話,我就很滿足了。1.1.2選題意義以前聊天的方式早已離我們遠去。自從我們順應現代工業(yè)的潮流,從平房搬入樓房之后,在享受自動的水、電、煤氣之時,我們也失去了舊日街坊鄰里聚在一起群聚而談的熱鬧和溫情。甚至這種氣氛也滲透到了家庭內部,我們與家人一起聊天的時間也越來越少。然而這并不是說人們不需要聊天提供的享受。在人情淡薄懷舊氣氛濃重的九十年代末期,網絡聊天出現了。那些寂寞無助的“亞細亞的孤兒”們忽然發(fā)現了這一巨大的狂歡場所,更有甚于電子游戲帶給他們的新奇和喜悅?!熬W聊”借助網絡這種現代通訊手段在一定程度上恢復甚至拓展了傳統(tǒng)聊天在人們生活中失去的地盤。這些因素都決定了網絡聊天勢必成為一種青年人的流行事物。1.2任務、要求及問題提出1.2.1任務、要求本設計基于TCP/IP通信開發(fā)聊天程序,綜合利用VC++程序設計語言,以SQLServer2000數據庫做后臺開發(fā)出一高效實用的聊天系統(tǒng)客戶端軟件。該系統(tǒng)要求實現:1.實現各種信息的系統(tǒng)化、規(guī)范化和自動化;2.客戶端應具有十分友好的主窗口界面,登陸界面和注冊界面等;3.客戶端可以使用戶方便地進行登錄、下線、接收消息和發(fā)送消息等;4.客戶端能夠使用TCP連接實現與服務器端進行良好的協作與通信;5.客戶端能夠使用IP連接,與其他客戶端進行信息的收發(fā);6.客戶端各個界面的設計合理、實用。1.2.2問題提出隨著計算機應用技術的日益普及,網絡也遍及到我們生活的每個角落,很好的利用這人資源,將為我們的工作和學習,帶來極大的方便和提高工作效率,所以,開發(fā)一個網絡里的C/S通訊軟件,是十分必要。由于采用面向對象方法開發(fā)軟件具有明顯的優(yōu)點,本系統(tǒng)將采用面向對象方法進行開發(fā)。由于采用面向對象的系統(tǒng)模型可以使整個軟件系統(tǒng)的結構變得更加靈活,本系統(tǒng)的結構模型將采用面向對象的系統(tǒng)模型,采用VC++6.0這個可視化開發(fā)工具進行編碼。傳統(tǒng)的軟件工程方法有生命周期方法和快速原型法。面向對象方法學是一種全新的軟件工程方法,其出發(fā)點和基本原則是盡可能模擬人類習慣的思維方式,把構成客觀世界的實體抽象為對象。概括地說,面向對象方法學有四個要點:1.認為客觀世界是由各種對象組成的,復雜的對象可以由比較簡單的對象以某種方式組合而成;2.把所有對象都劃分成各種對象類,每個對象類可以定義一組數據和方法;3.按照子類和父類的關系,把若干對象類組成一個層次結構的系統(tǒng);4.對象彼此之間僅能通過傳遞消息互相聯系。用面向對象方法學開發(fā)的軟件有以下優(yōu)點:1.與人類習慣的思維方法一致;2.穩(wěn)定性好;3.可重用性好;4.可維護性好。1.3國內外發(fā)展概況1.3.1國內外發(fā)展概況伴隨著網絡的發(fā)展,已經有大量的聊天類軟件進入了實用階段,例如現階段大家經常使用的QQ,ICQ和MSN等,他們已經融入到大家的網絡生活中,成為大家網絡生活中必不可少的組成部分。而且其程序的功能也伴隨著網絡技術的發(fā)展而不斷的完善和發(fā)展,從最初的只支持文本式聊天一直到現在的圖文聊天、語音聊天、視頻對話等,技術越來越成熟可靠。網絡聊天軟件在國外的有icq等,在國內的主要有騰訊的Oicq,還有Ticq,OmO和一些在網頁上的即時通訊工具,像Chinaren網站上的WebMaster等等,都做得即美觀,且功能強大,Oicq現在擁有非常大的用戶群。現在也有很多,在網絡上不使用服務器的通訊軟件,這種軟件小巧且方便,也能解決一部分問題。但是有服務器的通訊軟件,有著不可比擬的優(yōu)勢:可以發(fā)送離線消息,不管用戶當時是否在線,下次上線時,就可以看到這條消息了。可以保存用戶的個人信息或介紹,供人查看。而且,那種通訊軟件,是以機器為通訊單元的,而這種聊天軟件是以人為通訊單元??傊?,這種軟件在網絡上,還是有很大的用途的,為網絡上通訊,帶來極大的方便。傳統(tǒng)聊天是指在任何現代通訊技術出現之前人類最尋常的交流方式,即面對面地對話。它包括非正式的私人談話,如家人團聚、鄰居串門、朋友造訪,也包括一些較為隨意的多人集會如酒會、沙龍和座談會。聊天的特點在于它的無目的性,天南地北,海闊天空,都可以作為談資助興,所以正式的訪談和會議都不在聊天之列。傳統(tǒng)聊天具有多重社會功能,比如交流情感、促進友誼、擴散信息等等,但最主要的還是消閑,一種有效的排解無聊的手段——無聊這一詞的字面意思就是指“不值一聊”。聊天作為一種消閑手段廉價而富有人情味,很適合人類這種擁有語言能力的高等群居動物。梁實秋的“雅舍小品”里有專文談聊天的好處。即使在現代通訊方式已經非常普及的今天,傳統(tǒng)聊天方式依然不可能被取代,然而它占有人們的時間已經大為縮小。雖然電話和網絡提供了遠程的即時交流手段,但是現代社會一方面加快了人們的生活和工作節(jié)奏,另一方面以商業(yè)化的手段向人們提供了更多消閑方式,其中電視就擠占了我們原先大量的聊天時間。由于電視的誘惑,傳統(tǒng)聊天被迫讓出了它在人類生活中的地位。茶余飯后不再是門前一張板凳圍在一起胡侃,而是每家每戶坐在封閉的單元房內面對一臺電子顯像管。電視節(jié)目雖然表面上比聊天更為豐富多彩,但是看電視本身單向傳遞信息,沒有反饋機制,觀眾只是被動地接受信息,只在極小的程度上參與節(jié)目。電視并不促進觀眾思考,也不會根據觀眾收看時的反應做出調整。更不要說電視的非人格化與聊天富有人情味的區(qū)別。電視雖然對人類消閑時間的爭奪戰(zhàn)中勝出,但它卻不可能滿足人類所有的需要,尤其是傳統(tǒng)聊天能夠滿足的那些需要。這些需要也不是電子游戲、觀看電影話劇表演甚至旅游所能替代的。這時,一種新的聊天形式借助網絡生長出來,填補了人們的精神空白。網絡聊天同樣具有傳統(tǒng)聊天的基本功能,即消閑的作用,它也同樣可以交流情感、促進友誼、傳遞信息,滿足表達欲望。但它并非是傳統(tǒng)聊天在網絡上簡單的呈現和復制,它具有并非本質但十分重要的特殊性質。1.3.2發(fā)展趨勢最后試著討論一下網絡聊天的命運。網絡聊天的現實存在不可能因為老師和家長的反對而消除,也不會因為某某法規(guī)的出臺而被管制。淘汰它的只能是更發(fā)達的聊天技術,即語音聊天。語音聊天更為經濟快捷,單位時間傳遞的信息量也更大。語音聊天的技術已經成熟,待它普及之后成熟之后,目前這種“打電話”的網絡聊天方式將成為歷史。等有一天,我們都可以像打免費電話那樣語音聊天時,我們還會懷念當年那段“此時無聲勝有聲”的網絡聊天故事嗎?設計原理和過程2.1用戶需求分析提供基于TCP/IP網絡的即時消息傳送、大小圖標方式、實時聊天、多人聊天等功能。具體列舉如下:支持多賬號??梢酝瑫r發(fā)送同一個消息給多人,通過輸入這些人的號碼列表或姓名列表??梢酝瑫r發(fā)送一個消息給所有好友。即使用戶不在線,也能通過服務器發(fā)送離線消息。提供消息、聊天的歷史記錄,方便對信息的查看和管理。提供查看在線的人的功能。提供按ID或姓名查找用戶的功能,添加用戶方便。小窗口顯示,不占用屏幕很大的空間。支持隱身登陸,可以看到在線的朋友,朋友卻不知道你上線??梢詫崟r顯示用戶的狀態(tài)和隨時改變自己的狀態(tài)。提供了自動彈出消息。好友上線通知。好友下線更新。查看好友信息。按姓名或號碼查找某人。在好友列表中刪除某人。更改個人信息。系統(tǒng)設置。主窗口總是浮在最上端。速度快,占用資源少。2.2設計原理概述采用客戶端——服務器模型,使用從MFC類中的CAsyncSocket類的派生類進行實現底層通訊,底層利用UDP數據報協議進行通訊,這樣,便于客戶端之間的直接通訊,也可以高效的傳送消息。因為使用UDP協議進行通訊,所以要自己控制其可靠性。我每發(fā)送一個數據,接受方接受到數據后,會發(fā)回一個響應信息,發(fā)送方在一個超時時間內,收到響應信息,就表示發(fā)送數據成功,若沒有收到,就表示發(fā)送失敗,會按用戶指定的次數N,重試N次,如果N次都失敗,就返回發(fā)送數據失敗。當然,發(fā)回來的確認信息也可能丟失,但確認信息很短,相對來說,丟失的機率會小一些,是一個折中的辦法。為了保存用戶信息和好友信息及一些相關數據,服務器使用到數據庫技術。服務器的數據庫采用的是ODBC的SQL2000數據源,服務器訪問數據庫,用的是MFC中的CDatabase和CRecordset,因為,對數據庫的操作簡單,服務器端,我只要功能,不需做界面,所以使用Sql語句直接訪問數據庫,已經足夠滿足要求了。服務器運行的流程為:服務器運行后,開啟服務,則服務器開始偵聽用戶請求,如有信息發(fā)送過來,首先,發(fā)送回確認信息,然后,建立一個線程,處理接受到的數據。在線程里,按照接受到數據的類別,進行相應的處理,如有需要,會向用戶發(fā)送處理的結果,或成功或失敗的消息,處理結束后,線程就結束了。這樣,可以實時接受每個用戶的請求,不會因為處理一個用戶的請求,而忽略了其它用戶。服務器端主要是為用戶存儲必要的信息,協調用戶之間的通訊,服務器端的設計,主要在功能上面。服務器端的設計和底層通訊的方法,將是我講述的重點??蛻舳说倪\行流程為:若有本地用戶信息,則取出本地用戶信息,顯示登陸窗口,若沒有,則顯示用戶注冊窗口(在登陸窗口里,也可以選擇用戶注冊)。登陸時,可選擇是否隱身,進入系統(tǒng)后,好友列表中,在線的人,將以高亮度顯示,并處在列表的上頭。不在線的人,將以灰色顯示。登陸后,如果有的話,服務器會發(fā)來好友給你發(fā)送的離線消息。如果有好友上線了,就會通知你,好友下線了,你也可以在好友列表中看到,你可能接受到別人給你發(fā)送的消息。根據用戶的操作,可以向好友發(fā)送消息,查看好友信息,查看在線的人,查找用戶等等功能??蛻舳酥饕翘峁┙o用戶一個友好的用戶界面,方便用戶操作,客戶端主要負責從服務器上得到數據后,顯示給用戶。從服務器得到好友的IP和Port后,就可以直接與好友進行通訊,聊天等等。客戶端主要是界面的設計(除了底層通訊的以外),根據不同的要求,向服務器發(fā)送各種類型的請求。然后等待服務器的響應??蛻舳说慕缑娴脑O計很繁瑣,沒有詳細介紹的必要,所以,我的重點將放在服務器的設計上。客戶端只是簡要的說明一下。2.3系統(tǒng)模塊設計聊天系統(tǒng)將分為六大模塊,包括用查找戶模塊,查找在線用戶模塊,發(fā)群體消息模塊,系統(tǒng)參數模塊,個人設定模塊,關于模塊。各模塊功能如下圖2-1所示:圖2-1聊天系統(tǒng)模塊在信息世界中,信息從客觀事物出發(fā)流經數據庫,通過決策機構最后又回到客觀世界,信息的這一循環(huán)經歷了三個領域:信息世界,數據世界,現實世界?,F實世界的事物反映到人的頭腦中,人的大腦對它有個認識過程,經過分析(選擇、命名、分類等)進入信息世界。這些信息再進一步加工、編碼,然后進入數據世界,而軟件系統(tǒng)的開發(fā)工作需要考慮這兩個方面的問題,也就是要考慮系統(tǒng)開發(fā)所需要的數據,以及如何對這些數據進行操作。這兩個問題貫穿了整個軟件系統(tǒng)的開發(fā)過程,這也就是數據庫的設計問題,也是軟件設計的一個核心。在系統(tǒng)設計的開始,我首先考慮的是如何用數據模型來數據庫的結構與語義,以對現實世界進行抽象。目前廣泛使用的數據模型可分為兩種類型,一種是獨立于計算機系統(tǒng)的“概念數據模型”如“實體聯系模型”,另一種是直接面向數據庫邏輯結構的“結構數據模型”。在本系統(tǒng)中我采用“實體聯系模型”(ER模型)來描述數據庫的結構與語義,以對現實世界進行第一次抽象。ER模型直接從現實世界抽象出實體類型及實體間聯系,然后用ER圖來表示數據模型。它有兩個明顯的優(yōu)點:接近于人的思維,容易理解;與計算機無關,用戶容易接受。但ER模型只能說明實體間語義的聯系,不能進一步說明詳細的數據結構,它只是數據庫設計的第一步。ER圖是直觀表示概念模型的工具,它有四個基本成分:1.矩形框,表示實體類型(考慮問題的對象)。2.菱形框,表示聯系類型(實體間的聯系)。3.橢圓形框,表示實體類型和聯系類型的屬性。對于主鍵碼的屬性,如下表示:屬性名(*)。4.直線,聯系類型與其涉及的實體類型之間以直線連接。本系統(tǒng)為聊天系統(tǒng)客戶端的實現,主要是聊天為主,考慮了多方面的因素以后,確定系統(tǒng)圖如下:下面就是各實體及聯系類型的屬性圖:(為了表達的方便,在這里我沒有在一張圖上表達出所有的關系,而是分別采用實體屬性關系圖(即E-R圖)來表達數據庫的結構。)本系統(tǒng)的實體圖如下圖所示:圖2-2用戶信息圖2-3好友信息圖2-4離線消息2.4服務器數據庫設計服務器數據庫設計的要求是要能夠滿足客戶端的需求,保存用戶信息和用戶好友信息,提供離線消息的服務,和發(fā)廣播消息的服務等??偣灿腥齻€表:用戶信息表(Users)好友信息表(Friends)離線消息表(OffMsg)表2-1用戶信息表(Users)字段名稱說明長度UserId(主鍵)自動編號4字節(jié)長整形Id用戶帳號4字節(jié)長整形Photoid用戶的圖象編號4字節(jié)長整形password用戶登陸的密碼字符串name用戶的姓名字符串sex用戶的性別單字節(jié)整形0男1女2未知age用戶的年齡字符串(為了適應不愿填寫此項的人)canbeadd能否被人加為好友單字節(jié)整形(0,1,2不能被加入,允許被任何人加入,需要身份驗證)email電子信箱字符串homepage個人主頁字符串address地址字符串phone電話字符串fax傳真字符串department部門字符串description個人簡介字符串表2-2好友信息表(Friends)字段名稱說明長度Num(主鍵)自動編號4字節(jié)長整形MyId自己帳號4字節(jié)長整形FriendId朋友帳號4字節(jié)長整形表2-3離線消息表(OffMsg)字段名稱說明長度MsgId(主鍵)自動編號4字節(jié)長整形RecvId接受者帳號4字節(jié)長整形SenderId發(fā)送者帳號4字節(jié)長整形RecvTime接受時間4字節(jié)長整形nIndex發(fā)送消息類型4字節(jié)長整形Msg發(fā)送消息備注類型2.5客戶/服務器程序設計C/S模型也是一種網絡模型,但與前述的模型不同,它并不是定義了網絡的層次結構,而是描述了一種網絡程序運行的方式。C/S模型將網絡應用程序分為客戶和服務器兩部分??蛻舴綄Ψ掌鞣桨l(fā)送信息請求,服務器方對其做出相應回答,提供服務。在TCP/IP網絡應用中,多數網絡應用程序是使用C/S模型設計的。服務程序通常在一個眾所周知的地址監(jiān)聽對服務的請求,也就是說,服務進程一直處于休眠狀態(tài),直到一個客戶程序提出了請求信息。此時,服務程序被"驚醒"并且為客戶提供服務,對客戶的請求作出適當的反應。雖然基于連接的服務是設計C/S應用程序的標準,但有些服務也是可以通過數據報Socket提供的。通常,網絡應用程序包含兩個獨立的應用程序:客戶程序和服務器程序。但是,也可以設計同時完成這兩種功能的程序,例如,一些服務器程序如果不能完成一個服務請求時,它將轉而充當客戶程序,向其它服務器程序請求信息。這方面的一個典型例子就是提供Internet從域名到IP地址映射服務的DNS服務器。為了充分理解TCP/IP協議族,必須理解幾個重要術語。這些術語指出了兩個TCP/IP傳輸協議:用戶數據包協議(UDP)和傳榆控制協議(TCP)之間的區(qū)別。這些術語進一步描述了與網絡連接、協議可靠性以及數據服務有關的協議特性。當建立服務器程序時,應該將服務器程序設計成等候客戶的請求。你知道,TCP傳輸層通過協議端口和應用程序(像服務器和客戶)通信,也就是說,為了按收客戶請求,服務器程序必須對傳輸層的一個特定協議端口進行偵聽。當服務器配置socket接口時,它使用bind()函數讓socket執(zhí)行體登記一個協議端口。也就是說,程序告訴socket執(zhí)行體使用哪-個協議端口進行數據傳送。Socket執(zhí)行體接著告訴傳輸層某個特定協議端口已被使用,并將其收到的所有數據傳送給SocketAPI。使用無連接協議的程序和使用面向連接協議的服務器程序之間的主要相似之處是它們都必須對一個協議端口進行偵聽。例如,無連接和連接服務器程序必須在協議端口偵聽客戶請求。同樣,由于無連接客戶程序沒有和遠地主機建立直接連接,所以它也必須對協議端口進行偵聽,以便接收以對它服務請求產生的數據報應答。SocketAPI中的bind()函數讓程序將一個本地地址(包括主機地址和協議端口)和一個Socket聯系起來。下面程序行顯示了一個典型的函數調用:result=bind(socket_handle,local_structure,socket_address,address_length)無連接客戶程序也對一個協議端口進行偵聽。使用無連接協議的程序不和遠地主機建立直接連接。無連接客戶程序使用數據報發(fā)送網絡服務請求,它不建立點到點連接。因此無連接客戶程序必須在一個協議端口,對應答數據報進行偵聽。與服務器程序一樣,無連接客戶程序也使用bind函數讓Socket執(zhí)行體登記協議端口。也就是說,類似服務器程序,無連接客戶程序告訴Socket執(zhí)行體使用哪個協議端口進行數據傳輸。Socket執(zhí)行體處理傳輸層內UDP軟件模塊和客戶程序之間的接口。圖2-5無連接協議的套接字調用時序圖圖2:面向連接的套接字系統(tǒng)調用時序圖圖2-6面向連接的套接字系統(tǒng)調用時序圖2.6TCP/IP協議TCP/IP是國際互聯網所采用進行網際互連的通信協議。實際所稱的TCP/IP協議包括了在國際互聯網絡應用的一組協議,互聯網協議族是此協議族的另一個名字。這個協議族包括幾種工作在不同層次上的網絡協議,IP互連協議(InternetProtocol),負責主機之間的傳輸數據。TCP傳輸控制協議(TransmissionControlProtocol),負責在應用程序之間傳遞數據。UDP用戶數據報協議(UserDatagramProtocol),提供給用戶進程的無連接協議,也負責在應用程序之間無連接傳遞數據,但不執(zhí)行正確性檢查。ICMP互連網控制報文協議(InternetControlMessageProtocol),處理主機間的差錯和傳送控制。ARP地址解析協議(AddressResolutionProtocol),負責將網絡層地址轉換成鏈路層地址。RARP反向地址解析協(ReverseAddressResolutionProtocol),負責將鏈路層地址轉換成網絡層地址。TCP/IP協議的核心是傳輸層協議(TCP、UDP)、網絡層協議(IP)和物理接口層,這三層通常在操作系統(tǒng)的內核中實現。TCP/IP網絡環(huán)境下的應用程序設計是通過網絡系統(tǒng)編程界面Socket實現的,Socket提供應用程序與系統(tǒng)內核之間的網絡編程接口。協議可以是可靠的可以是不可靠的。可靠的協議意味著當數據通過協議傳遞時,協議保證數據正確傳輸。可靠傳輸包括幾個特征。首先,為了確保數據正確傳送,協議在通信應用程序之間互相交換確認信息。也就是說,程序每次發(fā)送-個報文時,都期望對方發(fā)送一個相當于說:“我得到這個報文”的確認信息。如果發(fā)送程序沒有收到這樣一個確認信息,程序將自動重新發(fā)送此報文,直到得到應答信息為止。其次,為了確保傳輸的數據有效,可靠協議在每次傳輸時,都包含一個或更多的校驗和(CRC)。接收計算機重新計算校驗和,與收到的校驗和進行比較。如果不匹配,就表明在傳輸過程中發(fā)生了錯誤。傳輸控制協議TCP是一個使用校驗和確認信息以及其它可靠數據傳輸技術的可靠協議。相比之下,不可靠協議不能確保數據正確傳輸。協議試圖傳輸數據,但不保證成功。而且,不可靠協議在傳輸失敗后,并不通知發(fā)送方應用程序??蓪⒉豢煽繑祿鬏敱茸鳑]有返回地址的信件。如果發(fā)送地址是鍺誤的,由于郵遞系統(tǒng)不能將信退回給你,所以你就不知道信件有沒有送到。即使發(fā)送地址是正確的,也不能保證郵遞系統(tǒng)不丟失你的信件。TCP/IP協議組中存在的兩個基本數據服務是:字節(jié)流服務和數據報服務,使用字節(jié)流的協議將信息看作一串字節(jié)流進行傳輸。協議不管要求發(fā)送或接收數據的長度和傳送數目,只是將數據看作一個簡單的字節(jié)串流。使用數據報的協議將信息視作一個獨立單元進行傳輸。協議單獨發(fā)送每個數據報——數據報之間不相互依賴。例如,假設你使用字節(jié)流協議發(fā)送5個數據段(每個有10字節(jié))和一個包含50字節(jié)的數據段(總共100字節(jié))。連接的接收方可以按每次20字節(jié)讀數據(要讀5次)。傳輸控制協議是字節(jié)流協議。字節(jié)流協議不關心每個數據段的長度。如果應用程序使用字節(jié)流協議發(fā)送數據,則協議能夠保證連接的另一端按照發(fā)送的順序接收數據。相比之下,傳輸到同一目的地的多個數據報可能不會按發(fā)送順序到達。如果接收方應用程序要求數據順序一致,應用程序必須在數據到達后,校對這些數據。用戶數據報協議和互連網協議使用數據報傳輸數據。數據報類似于信件。如果你在同一天給同一個人郵寄兩封信,你無法知道那個人先收到那封信。同樣,如果連續(xù)兩天給兩個人郵信,你也不能知道哪封信先收到。收到信的順序和發(fā)送順序可能相反。在TCP/IP術語中,端口類(Port)似于IP地址,IP地址與主機地址是相聯系的,端口和協議相聯系。IP數據報保存目的和源IP地址,同樣傳輸協議也保存源和目的端口號。如果端口這個概念對你來說很陌生,請考慮計算機上的硬件端口。你可能編寫過往硬件端口送數據的程序。例如為了打印,如果沒有其它程序的話,必須向串或并端口發(fā)送數據。PC機給它的端口命名和編號。例如,PC機的并行打印端口稱為LPTl和LPT2,串行端口稱為COM1和COM2。在Internet上,網絡只是簡單地對協議端口編號。在PC機,LPT1表示并行端口1。成千個PC機應用程序使用此方案。多年來,程序員編寫PC程序時都假定LPT1表示并行打印端口1。同樣,程序員將每個Internet協議端口與一個特定的應用程序和功能聯系在一起。Internet包括像FTP、Telnet和Mail這樣廣泛使用的應用程序采用的應用協議,在Internet上,這些應用程序使用一種叫做“通用口分配”的端口。通用口分配是特定應用程序廣泛使用的一個協議端口。像PC程序員使用打印端口LPT1用于打印,Internet程序員也對具體應用程序使用許多協議端口。例如,平凡文件傳輸協議(FTP)的通用口分配是端口號21的。Telnet的通用口分配是端口號23。第三章詳細設計本章將論述軟件系統(tǒng)的面向對象設計過程。用VisualC++語言在Windows環(huán)境下編程實現。3.1類設計總體結構服務器的類總體結構:1.主應用程序類CServerApp包含全局的數據結構2.傳送信息類CData,CMsg1,CMsg2,CMsg3,CMsg4,CMsgChangePI,CMsgModifyPwd,CMsgOnlineFriend,CMsgPerson,CshowOnlinePeople處理傳輸數據3.SOCKET通訊類CServerSocket,CSendSocket,CRecvSocket處理底層通訊的類,與外部的接口是CserverSocket類,提供了一個簡單的接口4.其它類CMainFrame,CServerDoc,CServerView,CSetupDlg,CAboutDlgUserInfo結構存儲在線人的信息客戶端的類總體結構:1.應用程序類CClientApp包含全局的數據結構2.傳送信息類CData,CMsg1,CMsg2,CMsg3,CMsg4,CMsgChangePI,CMsgModifyPwd,CMsgOnlineFriend,CMsgPerson,CshowOnlinePeople處理傳輸數據3.SOCKET通訊類CClientSocket處理底層通訊的類,提供了一個簡單的接口4.用程序框架類CmainFrame處理用戶界面和一些接受數據的響應,主要的處理過程都在這個類里實現。5.對話框類CfriendDetailDlg顯示用戶詳細信息的對話框類CloginDlg顯示登陸窗口的對話框類ClookDlg顯示查看消息的對話框類CregisterDlg顯示注冊窗口的對話框類CsetupServerDlg修改服務器設置的對話框CtalkDlg顯示發(fā)送消息對話框的類CshowBroadcastDlg顯示廣播消息的對話框CshowAddMsgDlg顯示被加為好友的信息的對話框CmultiSendDlg通過姓名或ID列表的向多人發(fā)送信息的對話框CsendToAllDlg向所有好友發(fā)送消息的對話框CModifyPIDlg修改個人信息的對話框6.界面類CGfxGroupEdit,CGfxOutBarCtrl,CGfxPopupMenu實現像OutBar和oicq樣式的那種滾動分欄的界面類,從Internet,上獲得的源代碼,通過修改一些接口,使之更適合我的應用。提供了一個漂亮的界面。7.TrayIcon類處理在任務欄上添加.修改.刪除圖標的類。封閉了Window的API函數8.全局結構:UserInfo結構存儲在線人的信息FriendState在好友線信息結構SaveMsg消息的存儲結構Sparam傳給線程的參數結構3.2服務器端底層通訊類設計為了使能及時響應用戶的請求,當用戶很多時,仍然能夠適應要求,我把偵聽與發(fā)送數據的Socket分開,并分別都建立了多個實例,也就是說,支持多個端口的偵聽,發(fā)送數據使用的是多個端口,我只對偵聽端口感興趣,對發(fā)送數據的端口不感興趣,因為,發(fā)送端口是多少都無所謂。CRecvSocket和CsendSocket都是從CAsyncSocket類里繼承而來,分別處理偵聽請求各發(fā)送數據,在CServerSocket類里,定義了幾個CRecvSocket和CSendSocket對象的實例,通過CServerSocket類對內部進行組織和管理,提供給上層的接口是CServerSocket,它隱藏了服務器底層通訊的細節(jié)及多線程發(fā)送數據的問題,提供給上一層一個統(tǒng)一的接口,CServerSocket類的使用,是先建立一個它的實例,再調用成員函數Create(),傳入必要的參數,發(fā)送數據時,就調用其成員函數SendData,處理接受數據,在CRecvSocket類的OnReceive里處理,調用了一個名為ProcessRecvData的線程函數,用戶在這個線程函數里寫上具體的處理代碼算法描述:發(fā)送一個數據,需要等待響應信息的回來,如果在規(guī)定時間內,還沒有收到確認信息,則認為發(fā)送數據丟失,將重試FailReDoTime次,如果還是沒有確認信息發(fā)送回來,則返回發(fā)送失敗,否則,返回發(fā)送成功。因為服務器是多線程的發(fā)送數據,有一個請求,就建立一個線程進行處理。我為每個發(fā)送socket設置一個是否忙的標志busy,當需要發(fā)送數據時,就選擇一個空閑的sendsocket,設置為忙,然后發(fā)送數據,再設置回空閑,然后等待確認信息的回來。SendData函數的實現算法,通過設置一個緩沖區(qū)長度為N,然后,為每一次數據進行統(tǒng)計,發(fā)一次,就加1,然后把發(fā)送數據中的This=count%N,且把緩沖區(qū)中第This個成員設為0,在發(fā)送端,就要數組中的第This個成員是否為1即可,在接受到的確認信息中,取出This項,再為緩沖區(qū)中第This項設為1,這樣就可以快速且可靠的判斷發(fā)送數據是否得到響應回來了。偵聽類結構:classCRecvSocket發(fā)送數據的socket類結構:classCSendSocket:服務器的socket類:CServerSocket這個通訊類的SendData,當發(fā)送數據失敗時,可以重發(fā)幾次,次數可由用戶來確定3.3客戶端底層通訊類設計與客戶端上層的接口是CClientSocket類,它隱藏了服務器底層通訊的細節(jié)及多線程發(fā)送數據的問題,提供給上一層一個統(tǒng)一的接口,CClientSocket類的使用,是先建立一個它的實例,再調用成員函數Create()傳入必要的參數,發(fā)送數據時,就調用其成員函數SendData,或SendDataInThread處理發(fā)送數據,在CRecvSocket類的OnReceive里處理,向父窗口發(fā)送一個WM_RECIEVE_MSG消息,并把接受到的數據作為參數傳遞給父窗口。兩個函數的適應情況,SendData函數,適用于需要直接發(fā)送數據的場合,不需要回應。如果在線程里執(zhí)行,則可由其返回值確定發(fā)送成功與否。而SendDataInThread是建立一個線程,在線程里調用SendData函數進行發(fā)送數據,通過向指定接受窗口發(fā)送消息來確定是否成功。算法描述:發(fā)送一個數據,需要等待響應信息的回來,如果在規(guī)定時間內,還沒有收到確認信息,則認為發(fā)送數據丟失,將重試FailReDoTime次,如果還是沒有確認信息發(fā)送回來,則返回發(fā)送失敗,否則,返回發(fā)送成功。因為客戶端可以多線程的發(fā)送數據,有一個請求,就建立一個線程進行處理。我為每個發(fā)送socket設置一個是否忙的標志busy,當需要發(fā)送數據時,就選擇一個空閑的sendsocket,設置為忙,然后發(fā)送數據,再設置回空閑,然后等待確認信息的回來。SendData函數的實現算法,與服務器端是基本一樣的原理,通過設置一個緩沖區(qū)長度為N,然后,為每一次數據進行統(tǒng)計,發(fā)一次,就加1,然后把發(fā)送數據中的This=count%N,且把緩沖區(qū)中第This個成員設為0,在發(fā)送端,就要數組中的第This個成員是否為1即可,在接受到的確認信息中,取出This項,再為緩沖區(qū)中第This項設為1,這樣就可以快速且可靠的判斷發(fā)送數據是否得到響應回來了。因為在客戶端,大部分數據,是在某個消息處理函數中執(zhí)行的,所以,適用于服務器的SendData發(fā)送數據函數,在客戶端,若是在消息處理函數中發(fā)送,函數返回值,將永遠為FALSE,于是就添加了一個SendDataInThread函數,把發(fā)送數據的過程放在線程里執(zhí)行,通過發(fā)消息的手段,來返回結果。在SendDataInThread函數中,調用SendData函數進行發(fā)送數據??蛻舳送ㄓ嶎惖慕Y構:CClientSocket在線程里發(fā)送數據,成功,或失敗都會向指定窗口類發(fā)送一個WM_SENDINTHREAD_RES的消息,參數WPARAM為發(fā)送數據的指針,參數LPARAM為1,則表示發(fā)送成功,0則表示發(fā)送失敗3.4客戶/服務器間通訊數據類設計整個系統(tǒng)的所有的發(fā)送的數據,都包含在這幾個類中了,當要發(fā)送一種數據,則先確定一個數據類,然后填入相應數據,再調用函數PackToBuf就可以把這些數據,存入szBuf的數組緩沖區(qū)中,num指示其長度,LoadFromBuf函數則是已知在緩沖區(qū)中數據,把各項的值,從緩沖區(qū)中提取出來。因為使用udp協議發(fā)送數據,sendto和recvfrom函數,只能處理串的發(fā)送和接受,所以,把數據壓為串,和從串中恢復數據,是這些數據類所必須完成的功能。算法描述:定義的基類,提供了數據的一種統(tǒng)一的接口,其派生類再對其虛函數進行重載,實現相應的功能。在數據的打包過程中,對字符串的打包原理為:先存入串長度,再存入串。串的長度,采用的是2個字節(jié)的WORD類型,已經足夠滿足要求了。打包時,按照某一順序,對其進行數據的存入串中,解開時,以相同的順序進行還原即可。其中,類CModifyPersonPI的算法與其它類不大一樣,因為它的成員中有一個位掩Mask成員,只有被選中的成員,才會打包入串。3.5服務器應用程序類設計CServerApp類,定義了服務器全局的數據結構,classCServerApp:publicCWinApp{public: voidSaveMyProfileSettings();//保存配置文件 BOOLLoadMyProfileSettings();//讀取配置文件 CServerApp(); CServerSocketm_Socket;//服務器端的上層socket接口 CArray<DWORD,DWORD>m_anPort;//服務器端開設的偵聽端口數組 intm_nSendNum;//發(fā)送端口的個數 intm_nTimeOut;//發(fā)送一次數據的超時時間 BOOLm_bServerStarted;//標志服務是否已經開啟 UserOnline*m_pUsers;//用來存儲服務開啟后,在線人的信息的一個指針, CDatabasem_Database;//數據庫對象 CStringm_sConnectString;//聯接數據庫需要的字符串參數 intm_nNumberOnline;//當前在線的人數 intm_nMaxUserId;//最大的用戶帳號(隨著用戶帳號的申請而增加) intm_nRecvMsg;//當前從啟動后,接受到多少交請求信息 CStringm_strBroadcastPwd;//發(fā)廣播消息的密碼 CStringm_strDataSource;//數據源的字符串 CStringm_strDataSUID;//用戶UID字符串 CStringm_strDataSPwd;//數據源的密碼字符串 CStringm_strLocalIP;//本計算機的IP地址字符串 public: virtualBOOLInitInstance();//服務器程序的初始化部分 afx_msgvoidOnAppAbout(); afx_msgvoidOnSetupServer();//進行服務器設置 afx_msgvoidOnStartServer();//啟動服務 afx_msgvoidOnUpdateStartServer(CCmdUI*pCmdUI); afx_msgvoidOnUserOnline();//顯示在線的用戶的對話框 afx_msgvoidOnCloseServer();//關閉系統(tǒng)服務 afx_msgvoidOnUpdateCloseServer(CCmdUI*pCmdUI); afx_msgvoidOnAppExit();//處理程序的退出,執(zhí)行程序中必要的清理工作 afx_msgvoidOnUpdateUserOnline(CCmdUI*pCmdUI); DECLARE_MESSAGE_MAP()};3.6客戶端應用程序類設計CClientApp類,定義了客戶端全局的數據結構,客戶端應用程序的入口classCClientApp:publicCWinApp{public: CClientApp(); BOOLm_bOnlineState;//用戶的在線狀態(tài)(0,1,2分別為離線,在線,隱身) intm_nNumberHeadBmp;//保存頭像文件的個數(從文件中讀出) CArray<UserInfo*,UserInfo*>m_aUserInfo;//存儲好友信息的數組 CArray<UserInfo*,UserInfo*>m_aStranger;//存儲陌生人信息的數組 CArray<FriendState*,FriendState*>m_aUserState;//存儲好友的在線狀態(tài)及相關信息 CArray<FriendState*,FriendState*>m_aStrangerState;//存儲陌生人在線狀態(tài)及相關信息 CArray<SaveMsg*,SaveMsg*>m_aSysMsg;//接受到的系統(tǒng)消息數組 intm_nCurSysMsg;//當前讀到的系統(tǒng)消息的位置(索引) CArray<SaveMsg*,SaveMsg*>m_aBroadcast;存放廣播消息的數組 intm_nCurBroadcast;//當前讀到的廣播消息的位置(索引) CArray<SaveMsg*,SaveMsg*>m_aBeAdd;//存放自己被別人加為好友的信息 intm_nCurBeAdd;當前讀到的被別人加為好友的信息的位置(索引) CClientSocketm_Socket;//底層通訊類的實例對象 DWORDm_uCurrentUserID;當前用戶的ID號 CStringm_strCurIDpwd;當前用戶的密碼 CStringm_strCurUserDir;當前用戶的運行目錄(是ID的數字串為目錄) CStringm_strServerIP;服務器IP地址的字符串 DWORDm_uServerIP;服務器IP地址的32位整數 DWORDm_uServerPort;服務器的端口號 BYTEm_cLoginType;登陸時,選擇的狀態(tài)(是否隱身登陸) CImageListm_imaLarge;//用戶頭像的大圖標列表CImageListm_imaSmall//用戶頭像的小圖標列表CImageListm_imaHead;//供用戶選擇頭像時的大圖標列表(沒有灰色顯示的) CBitmapm_paBitmap;//用來指向在運行時,動態(tài)創(chuàng)建的Cbitmap對象數組 intm_nBitmapNum;//指示Cbitmap對象的個數 virtualBOOLInitInstance();//包括客戶端的初始化和配置信息的讀取等 virtualintExitInstance();//退出時,必要的清理工作,如果在線,則向服務器發(fā)送下線消息 voidSaveCurIDToFile();//把當前用戶的ID號,加入配置文件中,下次登陸就可以選擇了 BOOLSaveUserInfo();//保存所有用戶的信息到磁盤文件中 BOOLLoadFriendInfo();//從磁盤中讀取用戶信息 BOOLLoadFaceBmp();//從磁盤中讀取用戶頭像信息 BOOLLoadLocalAllUserID(CArray<int,int>&aID);//從配置文件中讀出所有可選登陸用戶的ID afx_msgvoidOnAppAbout(); afx_msgvoidOnSendBroadcast();//調用發(fā)送廣播對話框 afx_msgvoidOnSendtoAll();//調用向所有好友發(fā)送數據的對話框 afx_msgvoidOnSysSetup();//調用服務器設置的對話框 afx_msgvoidOnSearch();//調用查找用戶的對話框 afx_msgvoidOnSendFile();//實現文件的發(fā)送(現在還沒有完成) DECLARE_MESSAGE_MAP()};第四章系統(tǒng)實現4.1系統(tǒng)環(huán)境4.1.1系統(tǒng)軟硬環(huán)境軟件環(huán)境說明:MicrosoftVisual;C++6.0;SQLServer2000;WindowsXP硬件環(huán)境說明:CPU:Intel(R)Pentium(R)processor1.7GHz;內存:256M;硬盤:40G4.1.2系統(tǒng)安裝說明安裝:1.打開控制面板,選擇“管理工具”,打開“數據源”,會出現如下圖所示的ODBC數據源管理器。如下圖4-1所示:圖4-1ODBC數據源管理器2.點擊“添加”,出現一個“創(chuàng)建新數據源”界面。如下圖4-2所示:圖4-2ODBC數據源管理器3.點擊“MicrosoftAccssDriver(*.mdb)”然后點擊“完成”,點擊“完成”后,出現“ODBCMicrosoftAccss安裝”界面,輸入數據源名“IDServer”,點擊“完成”即可。如圖4-3所示:圖4-3ODBCMicrosoftAccess安裝之后出現“選擇數據庫”界面,選擇數據庫即完成。如圖4-4所示:圖4-4ODBC數據源管理器點擊“確定”即完成操作。4.1.3系統(tǒng)運行說明正確的對軟件進行安裝之后,即可以運行。首先打開您所安裝的文件夾,點擊“Server.exe”文件,打開服務器,單擊“啟動服務器”即可啟動服務器。操作正確應得到如下圖4-5及圖4-6:圖4-5聊天系統(tǒng)打開服務器界面圖4-6聊天系統(tǒng)打開服務器界面點擊“Clientd.exe”,如果您的電腦達到安裝說明書所提示的配置,程序首界面就會彈出,輸入正確的用戶號碼和密碼,此時程序就可以正常運行了。如圖4-7所示:圖4-7聊天系統(tǒng)用戶登錄界面4.1.4系統(tǒng)使用說明本系統(tǒng)大體可以分成登錄模塊、查找用戶模塊、查看在線用戶模塊、發(fā)群體消息模塊、系統(tǒng)參數模塊、個人設定模塊、正常聊天模塊七大模塊。這五大模塊以及其所包含的各分支小模塊完成了此聊天系統(tǒng)客戶端的主要使用功能。4.2具體實現4.2.1登錄模塊在用戶要登錄聊天系統(tǒng)時,系統(tǒng)會進入如下圖所示的用戶登錄界面,在顯示的信息中包括用戶號碼和密碼,用戶需正確輸入個人號碼和密碼才能進入下一界面。如下圖4-8所示:圖4-8用戶登錄界面4.2.2查找用戶模塊進入主界面后,用戶就可以在系統(tǒng)管理功能模塊中進行聊天、查找用戶、修改個人信息等。點擊系統(tǒng),會出現下列信息,按照需要選擇,即可達到相應功能。如下圖4-9所示:圖4-9系統(tǒng)管理下拉菜單各功能項點擊查找用戶,會出現查找用戶框,輸入需要查找的用戶的ID號或姓名,即查找相應的用戶。如下圖4-10所示:圖4-10按ID號查找用戶功能號右鍵單擊所查找的用戶,即可出現“加為好友”和“詳細資料”項。如下圖4-11所示:圖4-11查找用戶備選項單擊“加為好友”即可加為好友。單擊“詳細資料”及可查看所查用戶的詳細資料。如下圖4-12所示:圖4-12所查找用戶的詳細資料4.2.3查看在線用戶模塊點擊查看在線用戶可查看當前在線的用戶。對已經查找到的在線用戶單擊右鍵同樣會出現“加為好友”和“詳細資料”項,執(zhí)行結果同查找用戶執(zhí)行結果。如下圖4-13所示:圖4-13成功查找在線用戶界面4.2.4點擊“發(fā)群體消息”選框,出現一個向所有好友發(fā)送消息的對話框,用戶可以通過此對話框向所有好友發(fā)送消息。如下圖4-14所示:圖4-14發(fā)送群體消息對話框用戶好友收到消息對話框如圖4-15所示:圖4-15發(fā)送群體消息對話框4.2.5點擊“系統(tǒng)參數”選項,能查看用戶的服務器地址和服務器端口。如下圖4-16所示:圖4-16系統(tǒng)參數模塊4.2.6點擊“個人設定”選項,可以更改個人基本信息,包括修改密碼等。如下圖4-174-18所示:圖4-17用戶詳細信息界面圖4-18用戶修改密碼界面4.2.7在主界面中,在好友圖標處左鍵單擊即可出現收發(fā)消息界面,可方便向該好友發(fā)送消息。如下圖4-19所示:圖4-19用戶發(fā)送消息界面4.3系統(tǒng)測試檢查程序是否還存在邏輯上的錯誤,確保程序的順利運行。確保程序在網絡上的連接正確。測試過程如下:編譯程序,如果程序無邏輯錯誤就可以編譯通過。通過編譯后,可直接運行程序。點擊啟動,開始啟動服務器端。啟動時,服務器已經設置好服務器地址,服務器地址為,端口號默認為4000,如啟動成功,則顯示服務器啟動成功。如下圖4-20所示:圖4-20服務器設置服務器啟動成功后,可啟動客戶端登陸服務器,客戶如成功登陸服務器,則在客戶端輸入用戶帳號和密碼,如果輸入有誤,數據無法正確傳輸,系統(tǒng)提示為:密碼不符合,是否需要登錄服務器驗證。如圖4-214-22所示:圖4-21用戶登錄圖4-22服務器驗證如需要驗證,則進入服務器驗證,驗證服務器地址和端口號是否正確,如不需要,則退出登錄。正常主界面如下圖4-23所示。圖4-23登錄主界面客戶端啟動成功后便可進行自由聊天及實現各項系統(tǒng)功能。結論本課題重點討論C/S的程序的設計方法和過程,對整個系統(tǒng)進行了詳細設計,利用面向對象的方法,進行整個系統(tǒng)的設計。本課題主要做了以下工作:1.列舉了網絡聊天軟件的系統(tǒng)和界面需求。2.陳述了C/S程序的設計原理和過程。3.根據系統(tǒng)需求,進行整個系統(tǒng)的各個部分的詳細設計。本課題主要是對本軟件服務器端的設計作了比較詳細的介紹,并對服務器端進行了初步的開發(fā)。而客戶端的設計有很多都需要完善??蛻舳耸墙o用戶使用的,從方便和美觀上,還都還有很多需要完善的地方。而且,由于時間關系,客戶端還有些功能沒有完全。如果要使本系統(tǒng)成為一個實際應用系統(tǒng)并在網絡上實際應用,除了完成客戶端的功能外,我認為還應做以下的完善和開發(fā)工作:1.進一步完善底層通訊協議,使能夠更好的處理數據的發(fā)送和接受。2.多線程下的對臨界數據訪問的問題。3.對發(fā)送的數據,進行一定的加密措施,使之更加安全可靠。4.對本地用戶的密碼的加密問題,在本程序中,沒有對本地密碼進行加密。5.在客戶端系統(tǒng),功能的設置有待進一步豐富,功能的實現還有待完善和改進。6.在客戶端處理中,響應從服務器發(fā)來的數據,是在主線程里執(zhí)行的,所以,當接受數據忙時,就會出現沒有響應的情況。進一步考慮,如何能改善這種情況。謝辭在畢業(yè)論文完成之際,我在此對郭金令老師表示衷心的感謝!在整個畢業(yè)設計過程中,非常感謝老師和同學在各個方面的悉心指導。老師不懈的研究精神和崇高的敬業(yè)精神深深震撼了我。在今后的工作生活中,我將會以他為榜樣,向著郭老師指出的方向和高度最后,向所有在學習上給過我?guī)椭椭С值膶W院領導、老師和同學致以最衷心的感謝!謝謝!參考文獻[1]官章全.VC60高級編程范例[M].北京:電子工業(yè)出版社,2001:72~163[2]張海藩.軟件工程導論[M].北京:清華大學出版社,1998:18~209[3]謝希仁.計算機網絡[M].北京:電子工業(yè)出版社,1999:103~198[4]王國印.譯VisualC++TM技術內幕(第二版)[M].北京:清華大學出版社,1996:23~132[5]徐軍譯.VisualC++5開發(fā)人員指南[M].北京:機械工業(yè)出版社,1995:64~239[6]木林森.VisualC++5.0使用與開發(fā)[M].北京:清華大學出版社,1992:85~189[7]汪成為.面向對象分析、設計及應用[M].北京:國防工業(yè)出版社,1992:216~386[8]譚浩強.C程序設計[M].北京:清華大學出版社,1994:64~162[9]賀善侃.社會發(fā)展的新紀元[M].上海:上海辭書出版社,2004:47~230[10]RosemaryPhipps.TheMarketingCustomer[M].MassachusettsInstituteofTechnologyjournal,2005:23~199附錄附錄1:源代碼//AddFriendDlg.cpp:implementationfile#include"stdafx.h"#include"client.h"#include"AddFriendDlg.h"#include"Mainfrm.h"#include"frienddetail.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif///////////////////////////////////////////////////////////////////////////////CAddFriendDlgdialogCAddFriendDlg::CAddFriendDlg(CWnd*pParent/*=NULL*/) :CDialog(CAddFriendDlg::IDD,pParent){ //{{AFX_DATA_INIT(CAddFriendDlg) m_strID=_T(""); m_strName=_T(""); //}}AFX_DATA_INIT pDetailDlg=NULL; pWnd=NULL; bStartAdd=FALSE;}voidCAddFriendDlg::DoDataExchange(CDataExchange*pDX){ CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CAddFriendDlg) DDX_Control(pDX,IDC_FRIEND_DETAIL,m_headbmp); DDX_Control(pDX,IDC_RECT,m_Rect); DDX_Text(pDX,IDC_ID,m_strID); DDX_Text(pDX,IDC_NAME,m_strName); //}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CAddFriendDlg,CDialog) //{{AFX_MSG_MAP(CAddFriendDlg) ON_WM_TIMER() ON_BN_CLICKED(IDC_FRIEND_DETAIL,OnFriendDetail) //}}AFX_MSG_MAP ON_MESSAGE(WM_RECIEVE_MSG,OnRecvAddFriendRes) ON_MESSAGE(WM_NOTICE_ADDFRIEND,OnNoticeAddFriend)END_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////////CAddFriendDlgmessagehandlersvoidCAddFriendDlg::OnTimer(UINTnIDEvent){ if(nIDEvent==1) { EndWaitCursor(); KillTimer(1); CStringstr; str.LoadString(IDS_SERVER_NOT_RES); MessageBox(str); CDialog::OnOK(); }}LRESULTCAddFriendDlg::OnRecvAddFriendRes(WPARAMwParam,LPARAMlParam){ if(!bStartAdd)return0; bStartAdd=FALSE; CData*pData=(CData*)wParam; if(pData->index==RE_ADD_AS_FRIEND) { KillTimer(1); CMsg3msg; CopyDataBuf(&msg,pData); deletepData; if(!msg.LoadFromBuf())return0; //(0,1,2,3別人拒絕,成功加入,要求驗證人份,此人已經為好友) En
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度綠色餐飲采購標準合同3篇
- 二零二五年度冷鏈物流倉儲管理服務合同2篇
- 2025年度苗木種植基地土地租賃合同樣本(含品牌授權)
- 2025年度飛行員勞動合同(含飛行業(yè)績獎勵)4篇
- 中醫(yī)師專屬2024聘用協議模板版B版
- 個性化全新承諾協議文檔(2024版)版B版
- 二零二五年度出租車公司股權置換及運營權轉讓協議3篇
- 2025年度個人商鋪租賃稅費代繳及財務結算合同4篇
- 二零二五年度農民合作社加盟社員入社合同范本
- 個人寵物寄養(yǎng)服務2024年度合同
- 皮膚內科過敏反應病例分析
- 電影《獅子王》的視聽語言解析
- 妊娠合并低鉀血癥護理查房
- 煤礦反三違培訓課件
- 向流程設計要效率
- 2024年中國航空發(fā)動機集團招聘筆試參考題庫含答案解析
- 當代中外公司治理典型案例剖析(中科院研究生課件)
- 動力管道設計手冊-第2版
- 2022年重慶市中考物理試卷A卷(附答案)
- Python繪圖庫Turtle詳解(含豐富示例)
- 煤礦機電設備檢修技術規(guī)范完整版
評論
0/150
提交評論