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

正文內容

基于局域網的聊天軟件的設計與實現(xiàn)(文件)

2024-12-23 10:20 上一頁面

下一頁面
 

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