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

正文內(nèi)容

基于局域網(wǎng)的聊天軟件的設(shè)計(jì)與實(shí)現(xiàn)(文件)

 

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