freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于局域網(wǎng)的聊天軟件的設計與實現(xiàn)(參考版)

2024-12-03 10:20本頁面
  

【正文】 若發(fā)現(xiàn)有數(shù)據(jù)到來,則分析數(shù)據(jù)包類型,創(chuàng)建相關(guān)的處理線程執(zhí)行相關(guān)的處理操作,這樣可以在同一時間同時處理多個任務請求,提高了服務器的工作效率。在OnRecevie 函數(shù)里,可能同時會有多個數(shù)據(jù)包到來,若按照每到一個數(shù)據(jù)包進行解析和分發(fā),將可能延誤整個接收處理過程,造成接收緩沖區(qū)溢出,丟失大量數(shù)據(jù)包,因此 iMessaging 在處理接收來的數(shù)據(jù)時 ,會先將接收到的數(shù)據(jù)包加入到一個數(shù)據(jù)包隊列里面去,用另一個獨立的接收線程讀取該隊列里的數(shù)據(jù)包,再根據(jù)其命令類型分發(fā)處理(在 iMessaging 里封裝了一個 CPacket 類,用來存儲各種接收到的數(shù)據(jù)包)。 CIMSocket 類重載了虛函數(shù) OnReceive 用來接收網(wǎng)絡信息,該函數(shù)是一個系統(tǒng)自動調(diào)用的消息相應函數(shù),每當系統(tǒng)發(fā)現(xiàn)該套接字的接收緩沖區(qū)里有數(shù)據(jù)的時候,將調(diào)用該函數(shù),那么我們就可以在該函數(shù)里,調(diào)用 RecvFrom 或 Recv 來獲取數(shù)據(jù)。 該對 話框 類提供 一個 內(nèi)部 接口函 數(shù) BOOL CIMessageDlg::CreateUDPSocket(),用于創(chuàng)建 CIMSocket 類。 iMessaging 程序里根據(jù)CAsyncSocket 派生了一個 CIMSocket 類,服務器用該類進行數(shù)據(jù)的發(fā)送與接收,并將接收后的數(shù)據(jù)按照命令類型分發(fā)給各 處理子模塊。 ( 13)心跳功能:在線的客戶端能定期的向服務器發(fā)送心跳命令,避免非正常結(jié)束 iMessaging 后導致的非法的登出。服務器將打洞的結(jié)果返回給客戶端。 ( 10)查詢會員或群信息: iM 會員可以通過查詢界面,查詢指定會員或群的信息。 ( 8)群聊天:好友能在自己所加的群里,進行群聊天,其它人在群里的任何對話均能被接受到。 ( 6)文件傳輸:好友與好友之間可以任意互相傳輸文件,并且同時支持多個文件的高速傳輸。 ( 4)添加好友: iM 會員能夠添加其他用戶為好友,通過對該用戶發(fā)送添加請求,若該會員統(tǒng)一添加,兩會員便成為好友,更新好友列表,可以 進行好友間的功能。 ( 3)創(chuàng)建 IM 群:在客戶端下, iM會員可以創(chuàng)建多個 iM 群,客戶端將待創(chuàng)建的信息發(fā)送給服務器,服務器返回創(chuàng)建信息。 ( 10)登陸離線日志功能:服務器可以將所有用戶的登陸和離線的信息記錄到數(shù)據(jù)庫里,便于管理員進行信息察看 基于局域網(wǎng)的聊天軟件的設計與實現(xiàn) 23 2.客戶端功能描述 ( 1)會員登陸:要想使用 iMessaging 進行聊天,就必須在登陸界面進行會員登陸,客戶端會發(fā)送驗證的帳號和密碼給服務器 ,若驗證通過,就能登陸進該帳號,進行后續(xù)的服務功能。 ( 8) UDP 打洞服務:當客戶端無法正常與好友進行通訊時,會請求服務器進行 UDP 打洞服務,即是通知另一會員向該申請的好友 IP 和端口發(fā)生一個數(shù)據(jù)包,使其成為信任 IP和端口。 ( 7)心跳功能:為了防止客戶端因非正常退出而導致服務器誤認為其還在線,客戶端會每隔一段時間向服務器發(fā)送心跳命令,因此服務器也會每隔一段時間檢測各在線會員是否按時發(fā)送心跳事件。若成功加入該群,還會更新群成員表。若添加 成功,還會更新好友關(guān)系表。該功能主要用于獲取好友列表和群成員列表信息。 ( 2)注冊會員:當客戶端發(fā)送了注冊會員命令后,服務器會添加注冊的信息到會員表里,并更新在線會員列表,同時返回會員帳號給客戶端。 基于局域網(wǎng)的聊天軟件的設計與實現(xiàn) 11 進度可行性 鑒于本軟件的目標要求和特點,以及工作量評估,能夠保證在預期的時間內(nèi)完成該聊天軟件的設計和開發(fā)。后期服務器升級,維護需要一定的資金。在查看好友發(fā)送得消息上,創(chuàng)建了信息提示欄面板,給用戶更友好的操作方式,具有操作可行性。 操作可行性 iMessaging 的操作界面是借鑒 界面設計而成,操作習慣完全符合于現(xiàn)在的網(wǎng)絡聊天用戶。本人在大一時開始學習 windows 編程,大二時做過網(wǎng)絡通信演示的項目,大四實習時也是做的 windows 項目,通過三年的學習 與積累對 MFC框架設計有深入認識,并熟悉 windows 內(nèi)存管理結(jié)構(gòu), DLL 編程,網(wǎng)絡編程,多線程編程等,能熟練編寫基于 windows 下的應用程序,能夠獨立完成 iMessaging 的設計和編碼。除此之外,必須深入理解 socket 編程,能熟練編寫基于 tcp,udp 的網(wǎng)絡通信。 可行性分析 技術(shù)可行性 iMessaging 聊天軟件是基于 windows 平臺下的應用軟件。 8. 發(fā)送離線消息。 7. 群聊天。 基于局域網(wǎng)的聊天軟件的設計與實現(xiàn) 10 6. 加入群。 5. 創(chuàng)建新群。 4. 文件傳輸。 3. 好友聊天。 2. 添加好友。任何非會員都可以登陸注冊界面注冊一個自己的 iMessaging賬號,今后就可以通過該帳號登陸 iMessaging 進行聊天。 3 系統(tǒng)分析 需求分析 根據(jù)現(xiàn)目前聊天軟件的普遍功能優(yōu)勢和缺點,以及用戶體驗所反映的情況,總結(jié)歸納出以下幾點需求分析。隨后, B就會發(fā)送一個消息到 A, NAT發(fā)現(xiàn)此行為,自動將 A添加到 B的受信列表中,這樣就可以實現(xiàn)正常的通 訊了。借于此功能,若某一客戶端要與另一客戶端進行聊天通訊,若發(fā)現(xiàn)無法 PING 通對方,就可以借助服務器的功能讓雙方正常通信,這就是 UDP 打洞技術(shù)。一般來講,只要發(fā)現(xiàn)該主機曾經(jīng)主動向該 IP 發(fā)送過信息,那么 NAT 會紀錄下來,并添加到任信列表里面去。 擴展功能 —— 廣域網(wǎng)聊天 由于該課題是基于局域網(wǎng)的聊天軟件,那如何實現(xiàn)廣域網(wǎng)的聊天呢?實際上,在廣域網(wǎng)中實現(xiàn)基于 UDP 的聊天功能幾乎不可能,那是因為大多數(shù)的電腦用 基于局域網(wǎng)的聊天軟件的設計與實現(xiàn) 9 戶在其小型網(wǎng)內(nèi)都會有一道 NAT 屏障擋住,由于 UDP 是不可靠的, NAT 發(fā)現(xiàn)當前IP 和端口是不可信任的,那么就會將該數(shù)據(jù)包擋在墻外,這樣就無法實現(xiàn)聊天功能。 由于多個線程在同時運行的時 候,會對共享數(shù)據(jù)進行訪問或修改,那么就必須要注意數(shù)據(jù)同步, windows 給我們提供了多種數(shù)據(jù)同步的方法,比如基于用戶模式的原子鎖,臨界區(qū), Slim 讀寫鎖等,還有基于內(nèi)核模式的內(nèi)核對象,如互斥對象,事件對象,信號量,條件變量等。若創(chuàng)建成功,該函數(shù)會返回一個 HANDLE,這個句柄標示了剛創(chuàng)建的線程內(nèi)核對象,當線程創(chuàng)建成功后,必須調(diào)用 CloseHandle 函數(shù)將其關(guān)閉,這是因為如果不關(guān)閉該內(nèi)核句柄,當線程退出后,操作系統(tǒng)并沒有銷毀該線程,造成資源浪費,這是因為獲取一個實內(nèi)核句柄都會增加內(nèi)核使用計數(shù),只有當該內(nèi)核對象的使用計數(shù)為 0時,才會銷毀該內(nèi)核對象,線程也是如此。常用的創(chuàng)建線程函數(shù)為 CreateThread 和 _beginthreadex,兩函數(shù)功能幾乎一樣(在某些特殊地方,兩者用法需注意,推薦用后者),在創(chuàng)建前必須定義一個按照線程函數(shù)原型的函數(shù),將其地址傳給創(chuàng)建線程函數(shù),讓操作系統(tǒng)知道即將從哪個地方運行線程。有一個概念容易搞錯,就是進程是否能獲得 CPU時間片?實際上,進程是無法獲取 CPU 時間片,只有該進程里的線程才能,所以說,真正執(zhí)行代碼的是 線程,而進程只能管理線程,管理內(nèi)存等。 在 windows 系統(tǒng)中,進程和線程是最為重要的兩個概念,因為整個系統(tǒng)就是基于進程和線程的。實際上,正如前面所說,操作系統(tǒng)并非 是給某一程序分配時間片,準確的說是給這個程序里的某一線程分配了時間片。但實際上在單CPU 的機子上,這些程序并不是同時在運行(即便是在多 CPU 的電腦上,也不可能所有程序同時運行),所有的程序都以某種調(diào)度算法,按照優(yōu)先級,依次獲取CPU 時間,每當一個程序獲得 CPU 時間后,它就會得到運行,而當運行一段時間后,操作系統(tǒng)會將其暫停,再接換新的線程來運行。要理解多線程編成就必須從以下幾個方面理解:一、操作系統(tǒng)多任務概念;二、線程和進程的聯(lián)系與區(qū)別;三、如何創(chuàng)建并管理銷毀一個線程;四、何謂線程同步,怎樣同步。 多線程編程 多線程編成是網(wǎng)絡編成的基礎,幾乎所有的網(wǎng)絡編程都將涉及到多個線程的數(shù)據(jù)傳輸,并且還要實現(xiàn)界面和數(shù)據(jù)處理互不影響。由于基于UDP 的文件傳輸在網(wǎng)絡環(huán)境差的情況下可能會大量丟包,因此不斷重復發(fā)包會導致網(wǎng)絡擁塞( TCP 在內(nèi)部實現(xiàn)了流量控制,因此發(fā)生網(wǎng)絡擁塞可能性很小),這是其最大的缺陷。我們可以模仿 TCP 的通訊機制來實現(xiàn)可靠的 UDP 傳輸。 基于 UDP 的文件傳輸 要實現(xiàn)文件傳輸?shù)姆绞接泻芏喾N,常用的方式就是像 MSN 那樣基于 TCP 的文件傳輸,這樣的傳輸很穩(wěn)定,可靠,容易實現(xiàn),但傳輸?shù)乃俣群托蕰容^慢。所以CAsyncSocket 的派生類,只需要在這些虛函數(shù)里添加發(fā)送和接收的代碼。 windows 提供了一個 CAysncSocke 異步 套接字類,它是基于 非阻塞 模型,對 Socket 函數(shù)進行了良好的 封裝 , CAsyncSocket::Create()有一個參數(shù)指明了你想要處理哪些Socket 事件,你關(guān)心的事件被指定以后,這個 Socket 默認就被用作了異步方式。目前, windows 提供了多種套接字 IO模型,如阻塞式 IO,非阻塞式 IO,事件 IO,重疊 IO(可提醒 IO),完成端口等,每一種 IO 模型都具有自身的優(yōu)勢和缺陷,其中完成端口可以達到目前 windows 平臺下最高 IO 性能。其中 TCP協(xié)議就是基于流套接字,而 UDP 協(xié)議基于數(shù)據(jù)報套接字, iMessaing 聊天程序主要基于 UDP 協(xié)議,而在特殊操作下又采用 TCP 協(xié)議保證其數(shù)據(jù)的可靠性。數(shù)據(jù)報套接字的一個重要特點是它保留了記錄邊界。數(shù)據(jù)報套接字支持 雙向的數(shù)據(jù)流, 基于局域網(wǎng)的聊天軟件的設計與實現(xiàn) 6 但并不保證是可靠,有序,無重復的。用戶目前可以使用兩種套接字,即流套接字和數(shù)據(jù)報套接字。應用程序一般僅在同一類的套接字間通訊。各種進程使用這個域互相之間用 Inter協(xié)議族來進行通訊( Windows Sockets 以上的版本支持其他的域,例如Windows Sockets 2)。套接字通常和同一個域中的套接字交換數(shù)據(jù)(數(shù)據(jù)交換也可能穿越域的界限,但這時一定要執(zhí)行某種解釋程序)。套接字存在于通訊域中。在這一端上你可以找到與其對應的一個名字。 它實現(xiàn)了標準 socket 編成的函數(shù),提供了一套屬于 windows 下的套接子 API。其移出消息對應的是 WM_MOUSELEAVE,移入按鈕消息是WM_MOUSEHOVER,分別定義其消息相應函數(shù),這樣就能實現(xiàn)狀態(tài)的更替,再進行相應的繪制。具體重繪方法就是采用前面提到的 OWNERDRAW屬性,重載虛函數(shù) DrawItem。那么因此就必須重新創(chuàng)建一個派生于CButton 的按鈕類,由于該類將應用于本軟件的所有按鈕控件,因此做成可貼狀態(tài)圖的按鈕控件最為合適。 iMessaging 采用了后者進行對列表控件的重繪,實現(xiàn)了好友列表控件,群列表控件類。兩種方式有不同之處,前者需要對整個 ListCtrl繪制,必須考慮到每一個 item 項的繪制情況。 CListCtrl重繪的方法有兩種 ,一種是采用微軟提供的 OWNERDRAW屬性 ,通過重載 DrawItem 虛函數(shù)來進行重繪。 對話框的繪制比較容易, MFC 為對話框提供了 OnPaint 消息相應函數(shù),但是在該函數(shù)下繪制并不能從根本上重繪對話框,因為該函數(shù)還會調(diào)用CDialog::OnPaint 函數(shù),在內(nèi)部還會再去重繪背景,因此要實現(xiàn)完全意義上的重繪背景,就必須響應 WM_ERASEBKGND 消息,在消息響應函數(shù)里實現(xiàn)我們自己的繪制方法,然后直接返回 TRUE,不再調(diào)用 CDialog::OnEraseBkgnd()函數(shù)。隨后可以創(chuàng)建一張兼容位圖,需要繪制的圖像將,函數(shù)原型如下 BOOL CBitmap::CreateCiompatibleBitmap(CDC* pDC,int nWidth,int nHeight)。雙緩沖繪圖就是將待繪制的圖片保存到內(nèi)存里,當需要繪制到屏幕上時,再一次性投遞到設備描述表里,這樣既避免了窗口重繪時的閃爍,又提高了繪制的速度和效率。 iMessaging 采用了的窗體背景重繪, listctrl 自繪,按鈕貼圖等方式實現(xiàn)了操作界面的 美觀。而正由于微軟將這些控件封裝得很好,對于要修改它的屬性,派生一些美觀的子控件難度就顯得比較大。 的確, MFC 給我們提供了很便捷的編程方式,我們幾乎可以不需要寫任何代碼就能生成一個帶有菜單,工具欄和視圖的窗口, MFC也提供了豐富的控件類,在設計對話框的時候,我們也只需要直接將控件拖進對話框里,而不用寫任何代碼。 系統(tǒng)實現(xiàn)技術(shù) MFC 窗口控件重繪 MFC(Microsoft Foundation Classes),是一個微軟公司提供的類庫( class libraries),以 C++類的形式封裝了 Windows 的 API,并且包含一個應用程序框架,以減少應用程序開發(fā)人員的工作量。但隨著其功能日益豐富、應用日益廣泛,特別是即時通信增強軟件的某些功 能如 IP電話等,已經(jīng)在分流和替代傳統(tǒng)的電信業(yè)務,使得電信運營商不得不采取措施應對這種挑戰(zhàn)。百度Hi具備文字消息、音視頻通話、文件傳輸?shù)裙δ?,您可通過它找到志同道合的朋友,并隨時與好友聯(lián)絡感情;另一類是企業(yè)用 IM,簡稱 EIM,如: E話通, UC, EC 企業(yè)即時通信軟件, UcS
點擊復制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1