【正文】
在這次的畢業(yè)設(shè)計中,我應(yīng)用了VC++,在這一重要的領(lǐng)域進(jìn)行了相關(guān)的實踐,不管是對我的研究能力,還是實際動手能力,還是資料查閱能力,都起了相當(dāng)大的益處。通過在程序的各個流程中插入斷點進(jìn)行單步跟蹤發(fā)現(xiàn),程序中各個模塊皆可進(jìn)行正常運行,數(shù)據(jù)也未發(fā)生異?,F(xiàn)象。對于Onsend()首先當(dāng)然是要判斷用戶所要發(fā)送的信息是否為空,如果為空就會通過AfxMessageBox函數(shù)產(chǎn)生一個窗口,提示“不能發(fā)送空消息!”。 }}void CClientSocket::OnReceive(int nErrorCode) { //重載函數(shù)(在本地套接字接收到消息時自動調(diào)用它進(jìn)行消息處理) //監(jiān)聽接收消息 char buff[sizeof(Header)]。 pEditSetFocus()。 //返回下一個元素的CObject* currSend((char *)header,sizeof(Header))。 //定義一塊內(nèi)存空間。各列都以字符型存儲。在這種結(jié)構(gòu)下,用戶工作界面是通過WWW瀏覽器來實現(xiàn),極少部分事務(wù)邏輯在前端(Browser)實現(xiàn),但是主要事務(wù)邏輯在服務(wù)器端(Server)實現(xiàn),形成所謂三層 3tier 結(jié)構(gòu)。任何用戶在聊天室所發(fā)的數(shù)據(jù),其客戶端將通過服務(wù)器端把消息群發(fā)至其他的每一個客戶端。②客戶端應(yīng)該時刻準(zhǔn)備接收來自服務(wù)器的消息,并作出反應(yīng)并將結(jié)果顯示給客戶。你可以看出,使用 MFC進(jìn)行Windows 編程時是一件比較容易的的過程。二、MFC框架由上面的介紹可以看出,直接用API函數(shù)開發(fā)一個WIN32程序是相當(dāng)麻煩的,有好多既定的重復(fù)性的工作要做,所以微軟就用C++的類機制將絕大部分的API函數(shù)進(jìn)行了封裝,構(gòu)成了類,并且將基本的流程也封裝在類機制下面,大大簡化了WIN32開的的復(fù)雜性,尤其是在開發(fā)比較大型程序的時候這個便宜性更會得以體現(xiàn)。參數(shù)是指要關(guān)閉的套接字的描述符。//16位端口號,網(wǎng)絡(luò)字節(jié)順序 struct in_addr sin_addr。簡單的說就是兩個進(jìn)程之間相互通訊,然后其中一個必須提供一個固定的位置,而另一個則只需要知道這個固定的位置,并去建立兩者之間的聯(lián)系,然后完成數(shù)據(jù)的通訊,基于這個簡單的模型,就可以進(jìn)入網(wǎng)絡(luò)編程。Socket最早是Unix操作系統(tǒng)中的概念,是為方便網(wǎng)絡(luò)編程而開發(fā)出的一個程序接口,后來被廣泛地應(yīng)用在各種平臺及系統(tǒng)中。發(fā)送者在受到這個段后,知道就可以進(jìn)行TCP數(shù)據(jù)發(fā)送了,于是,它又向接收者發(fā)送一個ACK段,表示,雙方的連接已經(jīng)建立。第一章 即時通信軟件相關(guān)技術(shù)第一節(jié) TCP/IP相關(guān)原理一、TCP/IP相關(guān)原理下面首先介紹OSI參考模型及TCP/IP參考模型。IM軟件的歷史并不久遠(yuǎn),但是它一誕生,就立即受到網(wǎng)民的喜愛,并風(fēng)靡全球。但是這些都是互聯(lián)網(wǎng)中實現(xiàn)的,而局域網(wǎng)則有很大的限制。Messenger雖出道較晚,但依托微軟的強大背景,實力也不可小視。傳輸控制協(xié)議TCP是(transmission control protocol,傳輸控制協(xié)議)專門用于在不可靠的因特網(wǎng)上提供可靠的、端對端的字節(jié)流通信的協(xié)議。三、TCP傳輸原理TCP協(xié)議在IP協(xié)議之上。當(dāng)一個Socket建立后,它就與本地的IP地址聯(lián)系起來,IP地址僅簡單地指定出入主機的特定路徑,而連接亦可有多個。(3)將套接字設(shè)置為監(jiān)聽模式等待連接請求listen()。格式:bind(SOCKET s,const struct sockaddr FAR * name,int namelen)。第三節(jié) MFC微軟基礎(chǔ)類一、WinSock APIWinSock APISocket接口是網(wǎng)絡(luò)編程(通常是TCP/IP協(xié)議,也可以是其他協(xié)議)的API。Microsoft 也提供了C++庫,它位于任何 Windows API之上,能夠使程序員的工作更容易。CAsyncSocket類所提供的唯一的抽象就是將與套接字相聯(lián)系的Windows消息以回調(diào)函數(shù)的形式表示,因此它所帶來的惟一方便就是程序員無需自行處理Winsock的I/O模型,而對如阻塞處理、字節(jié)排序差異以及Unicode等依然負(fù)有責(zé)任與靈活的控制權(quán)。要求提前設(shè)想到類似的盡可能多的可能發(fā)生的事件,做出相應(yīng)的應(yīng)對措施,并向用戶提交簡單易懂清晰明白的提示信息??蛻舳?客戶端2客戶端3客戶端4服務(wù)器發(fā)送私聊消息公共消息接收私聊消息發(fā)送私聊消息接收私聊消息公共消息(私聊) 單獨聊天模式,客戶端在啟動的時候會默認(rèn)進(jìn)入聊天室的公共聊天模式,當(dāng)客戶端A想與客戶端B進(jìn)行私聊的時候,客戶端A的用戶可以通過鼠標(biāo)雙擊“在線好友”列表中的用戶B的呢稱,之后在客戶端B會彈出一個窗口,詢問用戶B是否接受用戶A的請求。商業(yè)邏輯層是上下兩層的紐帶,它建立實際的數(shù)據(jù)庫連接,根據(jù)用戶的請求生成SQL語句檢索或更新數(shù)據(jù)庫,并把結(jié)果返回給客戶端,這一層通常以動態(tài)鏈接庫的形式存在并注冊到服務(wù)器的注冊簿(Registry)中,它與客戶端通訊的接口符合某一特定的組件標(biāo)準(zhǔn)(如 COM,CORBA),可以用任何支持這種標(biāo)準(zhǔn)的工具開發(fā)。這些常量會在程序的后續(xù)部分中,頻繁使用。 //將接收的內(nèi)容強制轉(zhuǎn)換為Header指針對象可以看出,服務(wù)器和客戶端每次通訊的內(nèi)容就是這個結(jié)構(gòu),即數(shù)據(jù)包是Header類型。當(dāng)接收到來自客戶端的信息后,根據(jù)信息內(nèi)容進(jìn)行不通處理。 CTime time = CTime::GetCurrentTime()。 char type = headertype。如果說測試的目的是為了說明程序中沒有缺陷,那么測試人員就會向這個目標(biāo)靠攏,因而下意識地選用一些不易暴露錯誤的測試示例。所以,功能測試為成功。我的知識結(jié)構(gòu)也不是足夠的充分,尤其是軟件工程部分的知識,因為沒有做真正的工業(yè)化的系統(tǒng)設(shè)計,甚至連畢業(yè)設(shè)計這樣的系統(tǒng)都沒有做過,所以很多步驟都是自己臨時學(xué)習(xí),大大影響了系統(tǒng)的開發(fā)進(jìn)度。至于聊天信息的發(fā)送和接收,在局域網(wǎng)內(nèi)幾乎就是瞬間響應(yīng),效率完全滿足用戶要求。 測試有助于提高軟件的質(zhì)量,但是提高軟件的質(zhì)量不能依賴于測試。 strTemp += _T(\r\n)。 /發(fā)送消息到服務(wù)器 if(m_pSocketSend((LPCTSTR)str, ())){ m_strMessage = 。在部分代碼中,使用到了Receive和Send函數(shù),在調(diào)用了這個兩個函數(shù)的過程,也使用了其中的一些參數(shù)。 memset(buff,0,sizeof(buff))。服務(wù)器端: class CChatServerApp : public CWinApp //APP類class CChatServerDlg : public CDialog //服務(wù)器主窗口類class CClientSocket : public CSocket //套接字類(收發(fā)信息類)class CServerSocket : public CSocket //套接字類(接受客戶端套接字連接)在客戶端:首先也是定義了一個APP管理類CMyChatApp,然后就是用于對話框方面的幾個類AGREEDLG,AskDlg,LoginDlg,MyChatDlg,Private。聊天客戶端申請并分配聊天帳號功能登陸聊天室密碼驗證功能公共聊天信息交互功能與選定用戶私聊功能顯示在線用戶狀態(tài)功能拒絕私聊請求功能 客戶端功能模塊三、數(shù)據(jù)庫設(shè)計邏輯設(shè)計本軟件所采用的數(shù)據(jù)庫是微軟自帶的ACCESS小型數(shù)據(jù)庫。它是軟件系統(tǒng)體系結(jié)構(gòu),通過它可以充分利用兩端硬件環(huán)境的優(yōu)勢,將任務(wù)合理分配到Client端和 Server端來實現(xiàn),降低了系統(tǒng)的通訊開銷。所以應(yīng)該采用模塊化開發(fā),各個模塊之間不要有太多的聯(lián)系,以免維護困難。②當(dāng)有用戶端向該端口發(fā)送請求時,服務(wù)器程序立刻建立一個與該客戶端的連接并根據(jù)該客戶端的請求作出相應(yīng)得處理,將處理結(jié)果返回給該客戶端。當(dāng)是使用MFC時,你編寫的代碼是用來建立必要的用戶界面控制并定制其外觀。MFC使用函數(shù)AfxSocketInit包裝了函數(shù)WSAStartup,在WinSock應(yīng)用程序的初始化函數(shù)IninInstance中調(diào)用AfxSocketInit進(jìn)行初始化。請求建立連接——connect()客戶端調(diào)用connect連接服務(wù)器端,其格式如下connect(SOCKET s,const struct sockaddr FAR * name,int namelen)。(2)向服務(wù)器發(fā)出連接請求connect()。MFC提供一些相對簡單的API來完成這些工作,Socket就是其中之一。在它發(fā)送這個數(shù)據(jù)的同時,還啟動了一個記時器。如果發(fā)送方的定時器在確認(rèn)信息到達(dá)之前超時,那么發(fā)送方會重發(fā)該數(shù)據(jù)報[1]。對于它的實現(xiàn),用戶不需對原有的局域網(wǎng)硬件進(jìn)行任何改動,具有實現(xiàn)成本低廉的優(yōu)點,它的使用能有效地提高局域網(wǎng)的使用效率,可以很好地解決用戶內(nèi)部局域網(wǎng)的即時通信需求。ABSTRACTWith the rapid development of puter network technology, more and more attention take to network technology, it has gradually infiltrated all aspects of our lives. There is also increasing emphasis on network applications, particularly in the timeliness of munications to lead the way, as opposed to EMAIL, IM has a twoway interactivity and immediacy, there is now a lot of popular instant messaging software such as , MSN , Sina UC, NetEase POPO, YAHOOtalk, for people to munications provided great convenience. But these are implemented in the Internet, and LAN have considerable limitations.This programming technique on the LAN chat a brief analysis of the WinSock programming munication mechanisms, such as Winpcap, raw socket. Th