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

正文內(nèi)容

vc局域網(wǎng)聊天程序修正-資料下載頁

2025-07-07 12:08本頁面
  

【正文】 當(dāng)連接成功后調(diào)用。OnClose為當(dāng)失去連接后系統(tǒng)自動調(diào)用。在這些函數(shù)中分別做了自己的事情。寫入自己的函數(shù)。Onrev函數(shù)前面已經(jīng)介紹過,這里介紹其他的幾個關(guān)鍵函數(shù)。void CTcpseverDlg::onac(){ (csrev[++csnum])。 csrev[csnum].setp(this,csnum)。}Onac函數(shù)作用是接受連接,并且讓連接的套接字計(jì)數(shù)加一。void CTcpseverDlg::oncl(){ for(int i=1。i=csnum。i++) if(!csrev[i]) csrev[i].Close()。}當(dāng)服務(wù)器退出后,要釋放服務(wù)器創(chuàng)建的套接字資源,這個函數(shù)也就是起到了這個作用。void CTcpseverDlg::OnMouseMove(UINT nFlags, CPoint point) { UpdateData()。 if(m_recvCtr==) { GetDlgItem(IDC_CLEAN)EnableWindow(false)。 } else { GetDlgItem(IDC_CLEAN)EnableWindow(true)。 } CDialog::OnMouseMove(nFlags, point)。}該函數(shù)是設(shè)置“清空”按鈕的狀態(tài)的,當(dāng)鼠標(biāo)在對話框中移動時檢測狀態(tài)。當(dāng)屏幕內(nèi)容不為空時。清空按鈕可以點(diǎn)解,否者則為灰色按鈕。6 結(jié)論在剛進(jìn)行該應(yīng)用軟件開發(fā)的時,可謂難以下手,對VC編程有所了解,但是網(wǎng)絡(luò)一塊很少涉及,經(jīng)過學(xué)習(xí)和請教知道了套接字可以實(shí)現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)傳輸。起初選用的是SOCKET,該方法為網(wǎng)絡(luò)編程的最基礎(chǔ)實(shí)現(xiàn)。雖然MFC封裝了很多有關(guān)套接字的API函數(shù),但實(shí)現(xiàn)起來也不簡單,對底層數(shù)據(jù)分析和實(shí)現(xiàn)要求較高[14]。最初用SOCKET實(shí)現(xiàn)的時候,設(shè)置連接成功,但是整個服務(wù)器等待監(jiān)聽以后便處于一種死鎖狀態(tài)。雖然客戶端成功接入,但是服務(wù)端始終不能進(jìn)行任何操作,甚至?xí)霈F(xiàn)無響應(yīng)情況。對于這問題可謂百思不得其解,在一次不經(jīng)意的學(xué)習(xí)中發(fā)現(xiàn)了阻塞這種說法,雖然之前也知道SOCKET是堵塞編程,但對阻塞一詞還是不明其意。在后來的學(xué)習(xí)中終于了解到多線程編程的重要性,之前的整個程序只有一個主線程,線程一直會停留在監(jiān)聽狀態(tài),程序肯定不能運(yùn)行其他功能!發(fā)現(xiàn)問題后又開始學(xué)習(xí)多線程編程,準(zhǔn)備分出一條線程處理監(jiān)聽事件,其它的線程處理其它事件。當(dāng)成功開辟線程后,在聲明的線程函數(shù)中寫入了監(jiān)聽代碼,監(jiān)聽順利完成,然而問題接著又來了。線程函數(shù)可聲明為全局函數(shù)或者是類的靜態(tài)函數(shù),為了維護(hù)代碼的封裝性,開發(fā)中選擇了后者。對于線程函數(shù)中收到的消息怎么傳回給對話框呢?最初試圖通過定義一個全局變量,再用API函數(shù)SetDlgItem()處理,但是編譯出現(xiàn)了問題,指出申明的全局變量沒有定義。線程函數(shù)定義為全局函數(shù)(也可以是某個類的靜態(tài)函數(shù)),為什么線程里的數(shù)據(jù)不能直接傳送呢?最后只得采用PostMessage()的方法將消息回傳,這次成功的完成了消息傳遞。接著問題又出現(xiàn)了,雖然成功的接受和發(fā)送了消息,但是消息最后會出現(xiàn)亂碼。對于出現(xiàn)亂碼的問題一般是數(shù)組越界訪問才會發(fā)生,在設(shè)計(jì)的過程中最好是對數(shù)組進(jìn)行安全性檢測??墒沁@次的亂碼出現(xiàn)不同尋常,最后也沒一個很好的解釋,只有另尋他徑,完成設(shè)計(jì)。需要指出的一點(diǎn),不提倡使用全局函數(shù)和變量是有原因的。全局函數(shù)和變量雖然對很多棘手的問題都能方便實(shí)現(xiàn),但是對程序的封裝性和可移植性是個很大的挑戰(zhàn)。C++的優(yōu)點(diǎn)便在于多態(tài)的實(shí)現(xiàn)和程序的封裝,程序員會盡量去提高整個程序的低耦合度,讓開發(fā)的程序便于移植。在多文件程序中,全局變量可能在多個地方被修改,所以維護(hù)起來麻煩,在查錯時也不好發(fā)現(xiàn)。而且全局變量可能會出現(xiàn)重復(fù)定義問題,使編譯出現(xiàn)錯誤。之后學(xué)習(xí)了CSocket類及其實(shí)現(xiàn)過程,發(fā)現(xiàn)這是一種非阻塞的網(wǎng)絡(luò)編程,實(shí)現(xiàn)很簡單,可以不用開辟線程處理監(jiān)聽等事件。鑒于CSocket確實(shí)有很多可取之處,而發(fā)送消息出現(xiàn)亂碼問題始終沒有解決,所以最后采用了CSocket完成了任務(wù)。在CSocket中當(dāng)應(yīng)用程序框架收到某些特殊事件的消息時會自動調(diào)用某些函數(shù),在這些特殊的函數(shù)中可以寫入自己的代碼來完成某些事件。CSocket是在CAsyncSocket基礎(chǔ)上擴(kuò)展的類,CAsyncSocket封裝了很多函數(shù),其中的OnAccept、OnSend、OnReceive、OnClose、OnConnect函數(shù)被應(yīng)用程序框架自動調(diào)用。這些函數(shù)分別在連接、發(fā)送消息、接受到消息及斷開連接時被調(diào)用,所以可以很方便的在這些函數(shù)里面添加自己的代碼來完成通訊。但需要注意的是,這些都是虛函數(shù),在使用前必須構(gòu)建新的繼承于CAsyncSocket或CSocket的類,再在類中重新定義這些函數(shù)完成調(diào)用。如果不這樣做,應(yīng)用程序框架也會調(diào)用上述函數(shù),但不會實(shí)現(xiàn)任何內(nèi)容。服務(wù)器監(jiān)聽時要設(shè)置監(jiān)聽端口,創(chuàng)建監(jiān)聽套接字,這樣客戶端才可以成功監(jiān)聽。客戶端用函數(shù)Connect()請求連接,當(dāng)連接成功后框架自動調(diào)用函數(shù)OnAceept()。然后連入服務(wù)器的客戶端就可以進(jìn)行聊天了。在聊天過程中當(dāng)消息到來時框架會自動調(diào)用函數(shù)OnReceive,可以在這個函數(shù)內(nèi)部寫入函數(shù)Receive()接收消息。當(dāng)某個用戶退出聊天室后,框架會自動調(diào)用函數(shù)OnClose(),這樣就可以實(shí)時的獲取用戶的活動情況,正確的顯示在線狀態(tài),并發(fā)送用戶退出信息。 服務(wù)器將所有客戶端連接在一個網(wǎng)絡(luò)中,所有客戶端發(fā)送的信息都是發(fā)送到服務(wù)器,通過消息過濾后服務(wù)器再將其發(fā)送給各個客戶端。所以服務(wù)器的工作量非常大。如果是進(jìn)行大規(guī)模的圖片、語音、視頻傳輸時,特別是在用戶很多的情況下服務(wù)器承受的壓力也是很大的。多服務(wù)器的連入很有必要,可以解決信息堵塞問題[15]。在開發(fā)的過程中原想進(jìn)行更多研究,比如圖片發(fā)送、抖動窗口、語音視頻發(fā)送、以及文件傳送等等。但是發(fā)現(xiàn)自己掌握的知識有限,并且時間短暫,所以只實(shí)現(xiàn)了文字聊天功能。在成功完成文字聊天后也嘗試過發(fā)送語音信息,在調(diào)用API函數(shù)檢測硬件信息時便出現(xiàn)了問題。對于未知的錯誤信息總是難以下手,在網(wǎng)上也找到了很多有關(guān)這些錯誤的解決方法,不過最終沒有成功完成語音的發(fā)送。當(dāng)基本功能實(shí)現(xiàn)后,便開始實(shí)現(xiàn)界面設(shè)計(jì),看了孫鑫的視頻教學(xué),對基本界面開發(fā)也有所了解。對騰訊軟件的寫入狀態(tài)比較感興趣。當(dāng)點(diǎn)擊狀態(tài)欄時那塊區(qū)域會變成可編輯的狀態(tài),并且那些以前已經(jīng)存在的文字會被全部選中。當(dāng)時很疑惑為什么點(diǎn)中了就可以變成編輯框?qū)懭胛淖?,反?fù)思考斟酌最后還是知道該如何實(shí)現(xiàn)??梢栽谀称瑓^(qū)域擺放兩個控件,靜態(tài)文本和編輯框。靜態(tài)文本用于顯示文字,編輯框用于編輯輸入文字。當(dāng)點(diǎn)擊那片區(qū)域后隱藏靜態(tài)文本,顯示編輯框。當(dāng)移動鼠標(biāo)點(diǎn)擊那塊區(qū)域以外的任何一個區(qū)域時便顯示靜態(tài)文本,隱藏編輯框。當(dāng)然其中還涉及了信息的傳輸?shù)葐栴}。在整個軟件開發(fā)的過程中,感覺自己做的不是很好,尤其是時間上的安排不是很合理。在編寫代碼前對相應(yīng)知識更是知道甚少。但是通過不斷的努力學(xué)習(xí),終于有所收獲,成功解決眾多問題。這也證實(shí)了,只有有了壓力才會拼命的去學(xué),只要不斷的努力,收獲總是有的。參考文獻(xiàn)[1] 李凌.WinSock 2網(wǎng)絡(luò)編程實(shí)用教程[M].北京:清華大學(xué)出版社,2005.[2] 孫鑫,++深入詳解[M].北京:電子工業(yè)出版社,2006.[3] Jackson M A. Principles of Program Design[M].Houston:Academic Press,2000.[4] [M].武漢:華中科技大學(xué)出版社,2001.[5] 馮宏華,徐瑩.C++應(yīng)用程序性能優(yōu)化[M].北京:電子工業(yè)出版社,2007.[6] 張虹.軟件工程與軟件開發(fā)工具[M].北京:清華大學(xué)出版社,2009.[7] 羅軍舟. TCP/IP協(xié)議及網(wǎng)絡(luò)編程技術(shù)[M].北京:清華大學(xué)出版社,2008.[8] C++網(wǎng)絡(luò)程序設(shè)計(jì)實(shí)例詳解[M].北京:人民郵電出版社,2006.[9] Bruce Eckel.Thinking in C++[M].北京:機(jī)械工業(yè)出版社,2009.[10] [M].北京:清華大學(xué)出版社,2007.[11] [M].北京:清華大學(xué)出版社,2007.[12] [M].北京:清華大學(xué)出版社,2002.[13] 陳世鴻,彭蓉. 面向?qū)ο筌浖こ蘙M]. 北京:電子工業(yè)出版社,1999.[14] Programmingfor Microsoft Windows[M] .Microsoft press,2002. [15] [M].北京:高等教育出版社,2002.致 謝畢業(yè)論文即將完成,我的學(xué)生生涯也要告一段落了。借此機(jī)會要對母校,親人,老師和同學(xué)們表示感謝!再回首,母校的一草一木是那樣熟悉;再回首,母校的一磚一瓦是那樣親切,在此對母校表示深深的感謝與懷念,感謝黃石理工給我深造的機(jī)會!感謝父母與親人們的默默支持!對于這次畢設(shè)設(shè)計(jì)的完成,首先得感謝成俊老師。在畢業(yè)設(shè)計(jì)的選題過程中,老師對每個同學(xué)都給出了針對性的建議,根據(jù)以后的工作選擇合適的課題。在軟件設(shè)計(jì)的過程中老師推薦書籍,軟件構(gòu)架也給出了寶貴的意見。在論文撰寫過程中,老師認(rèn)真的分析每個同學(xué)的論文,并且找出相應(yīng)的錯誤,督促我們改正!其次要感謝熱情可愛的同學(xué)們,在開發(fā)的過程中遇到了很多問題,同學(xué)們都積極的指出并幫助解決。在論文的撰寫過程中也給了不少意見。最后感謝孫鑫老師,他的視頻教學(xué)給了我很大的啟發(fā),可以說是VC深入學(xué)習(xí)的啟蒙老師。 李洪剛 2011年1
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1