版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 本科畢業(yè)設(shè)計(jì)(論文)即時(shí)通信軟件的開(kāi)發(fā)與設(shè)計(jì)38 / 43摘 要隨著計(jì)算機(jī)互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,國(guó)家對(duì)互聯(lián)網(wǎng)的不斷重視,各種各樣的社交軟件層出不窮,使用通信軟件交流成為了人們生活中必不可少的一部分。即時(shí)通訊工具作為未來(lái)跨越互聯(lián)網(wǎng)與移動(dòng)互聯(lián)網(wǎng)的業(yè)務(wù),其發(fā)展的潛力是十分巨大的,同時(shí),其商業(yè)模式的發(fā)展將是未來(lái)要關(guān)注的焦點(diǎn)。免費(fèi)與收費(fèi)相結(jié)合的發(fā)展策略將是IM的主要發(fā)展模式。本論文實(shí)現(xiàn)一個(gè)運(yùn)行于windows平臺(tái)的基于局域網(wǎng)的即時(shí)聊天系統(tǒng)。該聊天軟件包括服務(wù)器端和客戶端兩個(gè)模塊,客戶端向服務(wù)器端發(fā)送服務(wù)請(qǐng)求服務(wù)器端向客戶端提供相應(yīng)的服務(wù)。客戶端主要實(shí)現(xiàn)用戶登錄、注冊(cè)、聊天等功能。該軟件采用多線程技術(shù)、
2、tcp通信技術(shù)、udp通信技術(shù),并在傳輸數(shù)據(jù)時(shí)對(duì)消息實(shí)現(xiàn)序列化和數(shù)據(jù)的還原。該軟件能實(shí)現(xiàn)企業(yè)員工部聊天交流,避免企業(yè)部員工使用類似 等軟件泄露部信息,但是該軟件只實(shí)現(xiàn)了登錄、注冊(cè)、聊天等基本功能,還有很多不足之處需要改進(jìn)。關(guān)鍵字 客戶端,服務(wù)器,c/s,即時(shí)通信,套接字.ABSTRACTWith the continuous development of computer technology, the Internet, the state continues to pay attention to the Internet, a variety of social software aft
3、er another, using communication software exchange has become an indispensable part of people's lives. Instant messaging as the future across the Internet and mobile Internet business, its development potential is enormous, while the development of its business model will be the focus of the futu
4、re to pay attention. Free and fee development strategy will be a combination of IM's main development model.In this paper, the realization of a run on LAN-based instant messaging system windows platform. The chat software includes server and client of two modules, the client sends a service requ
5、est to the server to the client to provide appropriate services to the server. Client main implement user login, registration, chat and other functions. The software uses multi-threading technology, tcp communication technology, udp communications technology, and in the transmission of data to achie
6、ve reduction message serialization and data.The software enables employees chat internal communication and to avoid internal staff use similar software leaked inside information, but the software only to realize the login, registration, chat, and other basic functions, there are many deficiencies ne
7、ed to be improved.Keywords client, server, c / s, instant messaging, sockets目 錄摘要IABSTRACTII1 前言11.1課題背景與意義11.2國(guó)現(xiàn)狀與發(fā)展趨勢(shì)11.3現(xiàn)行系統(tǒng)的不足21.4 解決方案22 系統(tǒng)開(kāi)發(fā)關(guān)鍵技術(shù)與開(kāi)發(fā)環(huán)境42.1 qt與qtcreator開(kāi)發(fā)環(huán)境42.1.1 qt簡(jiǎn)介42.1.2 Qt Creator簡(jiǎn)介52.2 mysql數(shù)據(jù)庫(kù)介紹52.3 socket套接字介紹62.4 IP62.5 TCP72.5 udp協(xié)議簡(jiǎn)介72.6 c/s 模式介紹82.7多線程技術(shù)介紹93.系統(tǒng)設(shè)計(jì)113.1
8、 系統(tǒng)分析113.1.1 功能需求分析113.1.2 性能需求分析123.1.3 數(shù)據(jù)需求分析133.2系統(tǒng)設(shè)計(jì)143.2.1工作流程143.2.2服務(wù)器設(shè)計(jì)143.2.3客戶端設(shè)計(jì)154 系統(tǒng)關(guān)鍵技術(shù)實(shí)現(xiàn)164.1服務(wù)器實(shí)現(xiàn)164.2客戶端實(shí)現(xiàn)195系統(tǒng)測(cè)試335.1測(cè)試的意義與目的335.2軟件測(cè)試的方法335.3測(cè)試用例335.4測(cè)試結(jié)論34總結(jié)36參考文獻(xiàn)38致391 前 言1.1課題背景與意義即時(shí)通信(instant messaging)是指網(wǎng)絡(luò)上用來(lái)進(jìn)行實(shí)時(shí)通訊的系統(tǒng)服務(wù),人們可以使用即時(shí)通信軟件以文字、圖片、文檔、語(yǔ)音、視頻的形式通過(guò)網(wǎng)絡(luò)進(jìn)行異地實(shí)時(shí)信息交流。隨著互聯(lián)網(wǎng)的不斷普與
9、,使用通信軟件交流成為了人們生活中必不可少的一部分,而且人們對(duì)通信軟件的功能需求的不斷增大,即時(shí)通信軟件的功能也日趨完善,除了最基本的通訊功能外,逐漸集成了電子、博客、微博、音樂(lè)、電視、游戲、電子支付和搜索等多種功能,而這些功能的集成也使得即時(shí)通信軟件已經(jīng)不再是一個(gè)單純的通信工具,它已經(jīng)成為了集信息交流、娛樂(lè)、電子商務(wù)、商務(wù)辦公、客戶服務(wù)于一身的綜合化信息平臺(tái)。即時(shí)通信將世界構(gòu)建成了一個(gè)整體,實(shí)現(xiàn)了信息交流的無(wú)國(guó)界;無(wú)論你身在美國(guó)、還是遙遠(yuǎn)的非洲、亦或是我們身處的中國(guó),通過(guò)MSN或 聊天就可以知道你現(xiàn)在正在干什么,將要干什么;即時(shí)通信應(yīng)用在企業(yè)辦公上,企業(yè)工作效率得到了很大的提升,群組聊天讓員
10、工之間的技術(shù)探討暢通無(wú)阻;視頻會(huì)議技術(shù)讓你不再為繁瑣的會(huì)議東奔西走;這極大方便了我們的生活,提高了我們的生活品質(zhì)。因此,即時(shí)通信軟件的設(shè)計(jì)與開(kāi)發(fā)具有重要意義。1.2國(guó)現(xiàn)狀與發(fā)展趨勢(shì)國(guó)外即時(shí)通信系統(tǒng)發(fā)展迅速,特別是近年來(lái)即時(shí)通信軟件層出不窮,目前人們熟知的有騰訊 、 MSN、UC、skype等即時(shí)通信軟件;還有最近幾年新起的微信、易信、米聊等移動(dòng)端即時(shí)通信軟件。據(jù)一項(xiàng)數(shù)據(jù)調(diào)查顯示:2014年二季度末, 月活躍賬戶數(shù)達(dá)到8.29億,微信和WeChat(微信海外版)合并月活躍賬戶數(shù)達(dá)4.38億。在微信月活賬戶持續(xù)增長(zhǎng)的同時(shí), 智能終端月活躍賬戶突破了5.21億,同比增長(zhǎng)45%,相比上季度也有6%的增
11、幅。據(jù)相關(guān)統(tǒng)計(jì),目前中國(guó)智能手機(jī)用戶在5億左右,這意味著,智能手機(jī)用戶幾乎都活躍在手機(jī) 上。這些數(shù)據(jù)表明移動(dòng)端的即時(shí)通信軟件現(xiàn)今有很大的市場(chǎng),逐漸的由互聯(lián)網(wǎng)絡(luò)跨入移動(dòng)互聯(lián)網(wǎng),發(fā)展?jié)摿κ志薮?。而今,隨著人們對(duì)生活?yuàn)蕵?lè)的需求不斷增加,即時(shí)通信軟件不單單只有信息交流這一簡(jiǎn)單的功能,它還集成了與人生活緊密相關(guān)的一些功能;比如:騰訊手機(jī) 上的滴滴打車、 電影票、騰訊新聞、 錢(qián)包等。這些功能讓你體會(huì)到生活的便捷與快樂(lè);讓你足不出戶就可以實(shí)現(xiàn)電影票的購(gòu)買,而且還能幫你理財(cái)。即時(shí)通訊工具作為未來(lái)跨越互聯(lián)網(wǎng)與移動(dòng)互聯(lián)網(wǎng)的業(yè)務(wù),其發(fā)展的潛力是十分巨大的,同時(shí),其商業(yè)模式的發(fā)展將是未來(lái)要關(guān)注的焦點(diǎn)。免費(fèi)與收費(fèi)相結(jié)
12、合的發(fā)展策略將是IM的主要發(fā)展模式。集成多種與人們生活息息相關(guān)的服務(wù)功能是IM的主要發(fā)展趨勢(shì)1.3現(xiàn)行系統(tǒng)的不足隨著電子商務(wù)的發(fā)展,支付工具遍地開(kāi)花,即時(shí)通訊的經(jīng)濟(jì)價(jià)值將進(jìn)一步增強(qiáng),也不可避免地遭遇更大的安全性問(wèn)題。用戶信息泄露,盜號(hào)木馬、網(wǎng)絡(luò)詐騙釣魚(yú)等安全性問(wèn)題屢見(jiàn)不鮮。只要連接到Internet互聯(lián)網(wǎng),用戶賬號(hào)和密碼被盜對(duì)黑客來(lái)說(shuō)是件很容易的事。即時(shí)通信軟件一般要輸入個(gè)人賬號(hào)和密碼,驗(yàn)證成功后方可為其提供服務(wù)。而目前的即時(shí)通信廠商很少考慮它的認(rèn)證機(jī)制。這給黑客可乘之機(jī),攻擊者通過(guò)暴力破解、木馬欺騙等破解方法竊取密碼后冒充該用戶來(lái)查看聊天記錄并與其他用戶進(jìn)行通信,以此來(lái)竊取重要的信息。目前,
13、大多數(shù)即時(shí)通信軟件在通訊時(shí)傳遞的信息或文件僅僅采用了弱加密甚至不加密的方式,黑客能很容易的利用此缺陷來(lái)監(jiān)聽(tīng)、篡改、竊取用戶的重要數(shù)據(jù),這種泄密可能給用戶造成不可估量的損失;尤其是對(duì)一些商業(yè)機(jī)構(gòu)和金融機(jī)構(gòu),一旦泄密,將會(huì)構(gòu)成巨大的商業(yè)安全威脅。1.4 解決方案為了解決以上所提到的問(wèn)題,本軟件使用基于C/S模式的架構(gòu)模型,采用基于Socket的局域網(wǎng)通信工具的設(shè)計(jì)與實(shí)現(xiàn)方法。并且還采用tcp與udp通信協(xié)議來(lái)實(shí)現(xiàn)通信;基于Socket的局域網(wǎng)通信軟件可以為企業(yè)原有的局域網(wǎng)提供一種良好,安全,快速的通信機(jī)制它的實(shí)現(xiàn)無(wú)需對(duì)企業(yè)原有的局域網(wǎng)硬件進(jìn)行任何改動(dòng),具有實(shí)現(xiàn)成本低廉的優(yōu)點(diǎn)。而tcp協(xié)議是一種可靠
14、的面向連接的傳輸協(xié)議,通過(guò)序列確認(rèn)和包重復(fù)機(jī)制提供可靠的數(shù)據(jù)流發(fā)送和應(yīng)用程序的虛擬連接服務(wù)。經(jīng)過(guò)3次握手建立連接發(fā)送數(shù)據(jù)。但tcp不是與時(shí)的傳輸協(xié)議。而udp協(xié)議的傳輸效率高,在企業(yè)局域網(wǎng)穩(wěn)定安全的環(huán)境下實(shí)現(xiàn)用戶聊天時(shí)用udp協(xié)議就可以很好的彌補(bǔ)tcp協(xié)議的不足。 而在數(shù)據(jù)方面,服務(wù)器將用戶個(gè)人信息、用戶好友列表信息、客戶端連接信息存放于數(shù)據(jù)庫(kù)中。整個(gè)軟件有客戶端和服務(wù)器端組成,將所有功能封裝于各式類文件中,后期維護(hù)簡(jiǎn)單。2 系統(tǒng)開(kāi)發(fā)關(guān)鍵技術(shù)與開(kāi)發(fā)環(huán)境2.1qt與qtcreator開(kāi)發(fā)環(huán)境2.1.1qt簡(jiǎn)介Qt是一個(gè)跨平臺(tái)應(yīng)用程序和UI開(kāi)發(fā)框架。使用qt只需一次性開(kāi)發(fā)應(yīng)用程序,無(wú)需重新編寫(xiě)源代
15、碼,便可跨不同的桌面和嵌入式操作系統(tǒng)部署這些應(yīng)用程序。 Qt Software的前生為創(chuàng)始于1994年的Trolltech(奇趣科技),Trolltech于2008年6月 被Nokia收購(gòu),加速了其跨平臺(tái)的開(kāi)發(fā)戰(zhàn)略??偟膩?lái)說(shuō),相對(duì)于老舊的MFC和目前編程行業(yè)通行的VC+工具,Qt以其入門(mén)簡(jiǎn)單,跨平臺(tái)以與嵌入式等方面有著無(wú)可代替的優(yōu)越性,當(dāng)然MFC的完整性以與容的豐富性是Qt不與的。但是由于Qt為開(kāi)源框架,得到了眾多開(kāi)發(fā)者的支持,因此qt的普與也在近千萬(wàn)開(kāi)發(fā)人員的基礎(chǔ)上,再次的得到發(fā)展。自從諾基亞宣布停止開(kāi)發(fā)其和英特爾公司共同推出的Meego系統(tǒng)并大幅度裁員以來(lái),Qt用以移動(dòng)開(kāi)發(fā)人員集聚減少,從
16、而使得曾經(jīng)火熱的Qt減緩了在移動(dòng)設(shè)備上的發(fā)展的步伐,但是正因?yàn)槿绱?,Qt就更加專注于跨平臺(tái)。信號(hào)和槽是一種高級(jí)接口,應(yīng)用于對(duì)象之間的通信,它是QT的核心特性,也是QT區(qū)別于其它工具包的重要地方。信號(hào)和槽是QT自行定義的一種通信機(jī)制,它獨(dú)立于標(biāo)準(zhǔn)的C/C+語(yǔ)言。當(dāng) 一個(gè)特定事件發(fā)生的時(shí)候,一個(gè)信號(hào)被發(fā)射。Qt的窗口部件有很多預(yù)定義的信號(hào), 但是我們總是可以通過(guò)繼承來(lái)加入我們自己的信號(hào)。槽就是一個(gè)可以被調(diào)用處理特定信號(hào)的函數(shù)。Qt的窗口部件又很多預(yù)定義的槽,但是通常的習(xí)慣是你可以加入自己的槽,這樣你就可以處理你所感興趣的信號(hào)。信號(hào)和槽的機(jī)制是類型安全的:一個(gè)信號(hào)的簽名必須與它的接收槽的簽名相匹 配
17、。(實(shí)際上一個(gè)槽的簽名可以比它接收的信號(hào)的簽名少,因?yàn)樗梢院雎灶~外的 簽名。)因?yàn)楹灻且恢碌?,編譯器就可以幫助我們檢測(cè)類型不匹配。信號(hào)和槽是 寬松地聯(lián)系在一起的:一個(gè)發(fā)射信號(hào)的類不用知道也不用注意哪個(gè)槽要接收這個(gè)信號(hào)。Qt的信號(hào)和槽的機(jī)制可以保證如果你把一個(gè)信號(hào)和一個(gè)槽連接起來(lái),槽會(huì)在正確的時(shí)間使用信號(hào)的參數(shù)而被調(diào)用。信號(hào)和槽可以使用任何數(shù)量、任何類型的參數(shù)。它們是完全類型安全的,不會(huì)再有回調(diào)核心轉(zhuǎn)儲(chǔ)(core dump)。 2.1.2 Qt Creator簡(jiǎn)介Qt Creator 是Qt被Nokia收購(gòu)后推出的一款新的輕量級(jí)集成開(kāi)發(fā)環(huán)境(IDE),能夠跨平臺(tái)運(yùn)行,支持的系統(tǒng)包括Linux
18、,Mac OS X 以與Windows.允許開(kāi)發(fā)者為多桌面環(huán)境與移動(dòng)設(shè)備平臺(tái)創(chuàng)建應(yīng)用程序。它包括一個(gè)可視化調(diào)試工具和集成的 GUI 版面和外形設(shè)計(jì)師。根據(jù)官方描述,Qt Creator的設(shè)計(jì)目標(biāo)是使開(kāi)發(fā)人員能夠利用qt這個(gè)應(yīng)用程序框架更加快速與輕易的完成開(kāi)發(fā)任務(wù)。在功能方面,Qt Creator包括項(xiàng)目生成向?qū)?、高?jí)的C+代碼編輯器、瀏覽文件與類的工具、集成了Qt Designer 、Qt Assitant、Qt Linguist、圖形化的GDB調(diào)試前端,集成qmake構(gòu)建工具等。2.2 mysql數(shù)據(jù)庫(kù)介紹MySQL的概述MySQL是一個(gè)小型關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),開(kāi)發(fā)者為瑞典MySQL AB
19、公司。在2008年1月16號(hào)被Sun公司收購(gòu)。目前MySQL被廣泛地應(yīng)用在Internet上的中小型中。由于其體積小、速度快、總體擁有成 本低,尤其是開(kāi)放源碼這一特點(diǎn),許多中小型為了降低總體擁有成本而選擇了MySQL作為數(shù)據(jù)庫(kù)。MySQL是使用使用C和C+編寫(xiě),并使用了多種編譯器進(jìn)行測(cè)試,保證源代碼的可移植性特點(diǎn);它還支持AIX、FreeBSD、HP-UX、Linux、Mac OS、Novell Netware、OpenBSD、OS/2 Wrap、Solaris、Windows等多種操作系統(tǒng) ;它為多種編程語(yǔ)言提供了API。這些編程語(yǔ)言包括C、C+、Eiffel、Java、Perl、PHP、P
20、ython、Ruby和Tcl等;MySQL還支持多線程,充分利用CPU資源 并且優(yōu)化了SQL查詢算法,有效地提高查詢速度 。它既能夠作為一個(gè)單獨(dú)的應(yīng)用程序應(yīng)用在客戶端服務(wù)器網(wǎng)絡(luò)環(huán)境中,也能夠作為一個(gè)庫(kù)而嵌入到其他的軟件中提供多語(yǔ)言支持,常見(jiàn)的編碼如中文的GB 2312、BIG5,日文的Shift_JIS等都可以用作數(shù)據(jù)表名和數(shù)據(jù)列名 提供TCP/IP、ODBC和JDBC等多種數(shù)據(jù)庫(kù)連接途徑 ,提供用于管理、檢查、優(yōu)化數(shù)據(jù)庫(kù)操作的管理工具 ,可以處理?yè)碛猩锨f(wàn)條記錄的大型數(shù)據(jù)庫(kù)。與其他的大型數(shù)據(jù)庫(kù)例如Oracle、DB2、SQL Server等相比,MySQL自有它的不足之處,如規(guī)模小、功能有限
21、(MySQL Cluster的功能和效率都相對(duì)比較差)等,但是這絲毫也沒(méi)有減少它受歡迎的程度。對(duì)于一般的個(gè)人使用者和中小型企業(yè)來(lái)說(shuō),MySQL提供的功能已經(jīng)綽 綽有余,而且由于MySQL是開(kāi)放源碼軟件,因此可以大大降低總體擁有成本。 目前Internet上流行的構(gòu)架方式是LAMP(Linux+Apache+MySQL+PHP),即使用Linux作為操作系 統(tǒng),Apache作為Web服務(wù)器,MySQL作為數(shù)據(jù)庫(kù),PHP作為服務(wù)器端腳本解釋器。由于這四個(gè)軟件都是遵循GPL的開(kāi)放源碼軟件,因此使用這種方 式不用花一分錢(qián)就可以建立起一個(gè)穩(wěn)定、免費(fèi)的系統(tǒng)。 2.3 socket套接字介紹 socket套
22、接字,是支持TCP/IP的網(wǎng)絡(luò)通信的基本操作單元,可以看做是不同主機(jī)之間的進(jìn)程進(jìn)行雙向通信的端點(diǎn),簡(jiǎn)單的說(shuō)就是通信的兩方的一種約定,用套接字中的相關(guān)函數(shù)來(lái)完成通信過(guò)程。Socket套接字包括:流套接字(SOCK_STREAM):流套接字用于提供面向連接、可靠的數(shù)據(jù)傳輸服務(wù)。該服務(wù)將保證數(shù)據(jù)能夠?qū)崿F(xiàn)無(wú)差錯(cuò)、無(wú)重復(fù)發(fā)送,并按順序接收。流套接字之所以能夠?qū)崿F(xiàn)可靠的數(shù)據(jù)服務(wù),原因在于其使用了傳輸控制協(xié)議,即TCP(The Transmission Control Protocol)協(xié)議。數(shù)據(jù)報(bào)套接字(SOCK_DGRAM):數(shù)據(jù)報(bào)套接字提供了一種無(wú)連接的服務(wù)。該服務(wù)并不能保證數(shù)據(jù)傳輸?shù)目煽啃裕瑪?shù)據(jù)有可
23、能在傳輸過(guò)程中丟失或出現(xiàn)數(shù)據(jù)重復(fù),且無(wú)法保證順序地接收到數(shù)據(jù)。數(shù)據(jù)報(bào)套接字使用UDP(User Datagram Protocol)協(xié)議進(jìn)行數(shù)據(jù)的傳輸。由于數(shù)據(jù)報(bào)套接字不能保證數(shù)據(jù)傳輸?shù)目煽啃裕瑢?duì)于有可能出現(xiàn)的數(shù)據(jù)丟失情況,需要在程序中做相應(yīng)的處理。原始套接字(SOCK_RAW):原始套接字與標(biāo)準(zhǔn)套接字(標(biāo)準(zhǔn)套接字指的是前面介紹的流套接字和數(shù)據(jù)報(bào)套接字)的區(qū)別在于:原始套接字可以讀寫(xiě)核沒(méi)有處理的IP數(shù)據(jù)包,而流套接字只能讀取TCP協(xié)議的數(shù)據(jù),數(shù)據(jù)報(bào)套接字只能讀取UDP協(xié)議的數(shù)據(jù)。因此,如果要訪問(wèn)其他協(xié)議發(fā)送數(shù)據(jù)必須使用原始套接字。2.4 IP 網(wǎng)際協(xié)議IP是TCP/IP的心臟,也是網(wǎng)絡(luò)層中最重
24、要的協(xié)議。 IP層接收由更低層(網(wǎng)絡(luò)接口層例如以太 網(wǎng)設(shè)備驅(qū)動(dòng)程序)發(fā)來(lái)的數(shù)據(jù)包,并把該數(shù)據(jù)包發(fā)送到更高層-TCP或UDP層;相反,IP層也把從TCP或UDP層接收來(lái)的數(shù)據(jù)包傳送到更低層。IP 數(shù)據(jù)包是不可靠的,因?yàn)镮P并沒(méi)有做任何事情來(lái)確認(rèn)數(shù)據(jù)包是按順序發(fā)送的或者沒(méi)有被破壞。IP數(shù)據(jù)包中含有發(fā)送它的主機(jī)的地址(源地址)和接收它的主機(jī)的 地址(目的地址)。 高層的TCP和UDP服務(wù)在接收數(shù)據(jù)包時(shí),通常假設(shè)包中的源地址是有效的。也可以這樣說(shuō),IP地址形成了許多服務(wù)的 認(rèn)證基礎(chǔ),這些服務(wù)相信數(shù)據(jù)包是從一個(gè)有效的主機(jī)發(fā)送來(lái)的。IP確認(rèn)包含一個(gè)選項(xiàng),叫作IP source routing,可以用來(lái)指定
25、一條源地址和目的地址之間的直接路徑。對(duì)于一些TCP和UDP的服務(wù)來(lái)說(shuō),使用了該選項(xiàng)的IP包好像是從路徑上的最后一個(gè)系 統(tǒng)傳遞過(guò)來(lái)的,而不是來(lái)自于它的真實(shí)地點(diǎn)。這個(gè)選項(xiàng)是為了測(cè)試而存在的,說(shuō)明了它可以被用來(lái)欺騙系統(tǒng)來(lái)進(jìn)行平常是被禁止的連接。那么,許多依靠IP源地址 做確認(rèn)的服務(wù)將產(chǎn)生問(wèn)題并且會(huì)被非法入侵。2.5 TCP 如果IP數(shù)據(jù)包中有已經(jīng)封好的TCP數(shù)據(jù)包,那么IP將把它們向上傳送到TCP層。TCP將包排序并進(jìn)行錯(cuò)誤檢查,同時(shí)實(shí)現(xiàn)虛電路間的連接。TCP數(shù)據(jù)包中包括序號(hào)和確認(rèn),所以未按照順序收到的包可以被排序,而損壞的包可以被重傳。TCP將它的信息送到更高層的應(yīng)用程序,例如Telnet的服務(wù)程
26、序和客戶程序。應(yīng)用程序輪流將信息送回TCP層,TCP層便將它們向下傳送到IP層,設(shè)備驅(qū)動(dòng)程序和物理介質(zhì),最后到接收方。面向連接的服務(wù)(例如Telnet、FTP、rlogin、X Windows和SMTP)需要高度的可靠性,所以它們使用了TCP。DNS在某些情況下使用TCP(發(fā)送和接收域名數(shù)據(jù)庫(kù)),但使用UDP傳送有關(guān)單個(gè)主機(jī)的信息。2.5 udp協(xié)議簡(jiǎn)介UDP協(xié)議是英文UserDatagramProtocol的縮寫(xiě),即用戶數(shù)據(jù)報(bào)協(xié)議,主要用來(lái)支持那些需要在計(jì)算機(jī)之間傳輸數(shù)據(jù)的網(wǎng)絡(luò)應(yīng)用。包括網(wǎng)絡(luò)視 頻會(huì)議系統(tǒng)在的眾多的客戶/服務(wù)器模式的網(wǎng)絡(luò)應(yīng)用都需要使用UDP協(xié)議。UDP協(xié)議從問(wèn)世至今已經(jīng)被使用
27、了很多年,雖然其最初的光彩已經(jīng)被一些類似協(xié)議所掩蓋,但是即使是在今天,UDP仍然不失為一項(xiàng)非常實(shí)用和可行的網(wǎng)絡(luò)傳輸層協(xié)議。與我們所熟知的TCP(傳輸控制協(xié)議)協(xié)議一樣,UDP協(xié)議直接位于 IP(網(wǎng)際協(xié)議)協(xié)議的頂層。根據(jù)OSI(開(kāi)放系統(tǒng)互連)參考模型,UDP和TCP都屬于傳輸層協(xié)議。UDP是OSI參考模型中一種無(wú)連接的傳輸層協(xié)議,它主要用于不要求分組順序到達(dá)的傳輸中,分組傳輸順序的檢查與排序由應(yīng)用層完成,提供面向事務(wù)的簡(jiǎn)單不可靠信息傳送服務(wù)。UDP 協(xié)議基本上是IP協(xié)議與上層協(xié)議的接口。UDP協(xié)議適用端口分別運(yùn)行在同一臺(tái)設(shè)備上的多個(gè)應(yīng)用程序。UDP提供了無(wú)連接通信,且不對(duì)傳送數(shù)據(jù)包進(jìn)行可靠性保
28、證,適合于一次傳輸少量數(shù)據(jù),UDP傳輸?shù)目煽啃杂蓱?yīng)用層負(fù)責(zé)。UDP報(bào)文沒(méi)有可靠性保證、順序保證和流量控制字段等,可靠性較差。但是正因?yàn)閁DP協(xié)議的控制選項(xiàng)較少,在數(shù)據(jù)傳輸過(guò)程中延遲小、數(shù)據(jù)傳輸效率高,適合對(duì)可靠性要求不高的應(yīng)用程序,或者可以保障可靠性的應(yīng)用程序,如DNS、TFTP、SNMP等。2.6 c/s 模式介紹C/S 結(jié)構(gòu),即大家熟知的客戶機(jī)和服務(wù)器結(jié)構(gòu)。它是軟件系統(tǒng)體系結(jié)構(gòu),通過(guò)它可以充分利用兩端硬件環(huán)境的優(yōu)勢(shì),將任務(wù)合理分配到Client端和Server端來(lái)實(shí)現(xiàn),降低了系統(tǒng)的通訊開(kāi)銷。目前大多數(shù)應(yīng)用軟件系統(tǒng)都是Client/Server形式的兩層結(jié)構(gòu),由于現(xiàn)在的軟件應(yīng)用系統(tǒng)正在向分布
29、式的Web應(yīng)用發(fā)展,Web和Client/Server 應(yīng)用都可以進(jìn)行同樣的業(yè)務(wù)處理,應(yīng)用不同的模塊共享邏輯組件;因此,部的和外部的用戶都可以訪問(wèn)新的和現(xiàn)有的應(yīng)用系統(tǒng),通過(guò)現(xiàn)有應(yīng)用系統(tǒng)中的邏輯可以擴(kuò)展出新的應(yīng)用系統(tǒng)。這也就是目前應(yīng)用系統(tǒng)的發(fā)展方向。C/S 結(jié)構(gòu)的基本原則是將計(jì)算機(jī)應(yīng)用任務(wù)分解成多個(gè)子任務(wù),由多臺(tái)計(jì)算機(jī)分工完成,即采用“功能分布”原則。客戶端完成數(shù)據(jù)處理,數(shù)據(jù)表示以與用戶接口功能;服務(wù)器端完成DBMS(數(shù)據(jù)庫(kù)管理系統(tǒng))的核心功能。這種客戶請(qǐng)求服務(wù)、服務(wù)器提供服務(wù)的處理方式是一種新型的計(jì)算機(jī)應(yīng)用模式。Client 和Server常常分別處在相距很遠(yuǎn)的兩臺(tái)計(jì)算機(jī)上,Client程序的
30、任務(wù)是將用戶的要求提交給Server程序,再將Server程序返回的結(jié)果以特 定的形式顯示給用戶;Server程序的任務(wù)是接收客戶程序提出的服務(wù)請(qǐng)求,進(jìn)行相應(yīng)的處理,再將結(jié)果返回給客戶程序。C/S結(jié)構(gòu)的優(yōu)點(diǎn)是能充分發(fā)揮客戶端PC的處理能力,很多工作可以在客戶端處理后再提交給服務(wù)器。對(duì)應(yīng)的優(yōu)點(diǎn)就是客戶端響應(yīng)速度快。具體表現(xiàn)在以下兩點(diǎn):(1)應(yīng)用服務(wù)器運(yùn)行數(shù)據(jù)負(fù)荷較輕。最簡(jiǎn)單的C/S體系結(jié)構(gòu)的數(shù)據(jù)庫(kù)應(yīng)用由兩部分組成,即客戶應(yīng)用程序和數(shù)據(jù)庫(kù)服務(wù)器程序。二者可分別稱為前臺(tái)程序與后臺(tái)程序。運(yùn)行數(shù)據(jù)庫(kù)服務(wù)器程序的機(jī)器,也稱為應(yīng)用服務(wù)器。一旦服務(wù)器程序被啟動(dòng),就隨時(shí)等待響應(yīng)客戶程序發(fā)來(lái)的請(qǐng)求;客戶應(yīng)用程序運(yùn)
31、行在用戶自己的電腦上,對(duì)應(yīng)于數(shù)據(jù)庫(kù)服務(wù)器,可稱為客戶電腦,當(dāng)需要對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行任何操作時(shí),客戶程序就自動(dòng)地尋找服務(wù)器程序,并向其發(fā)出請(qǐng)求,服務(wù)器程序根據(jù)預(yù)定的規(guī)則作出應(yīng)答,送回結(jié)果,應(yīng)用服務(wù)器運(yùn)行數(shù)據(jù)負(fù)荷較輕。(2)數(shù)據(jù)的儲(chǔ)存管理功能較為透明。在數(shù)據(jù)庫(kù)應(yīng)用中,數(shù)據(jù)的儲(chǔ)存管理功能,是由服務(wù)器程序和客戶應(yīng)用程序分別獨(dú)立進(jìn)行的,并且通常把那些不同的(不管是已知還是未知的)前臺(tái)應(yīng)用所不能違反的規(guī)則,在服務(wù)器程序中集中實(shí)現(xiàn),例如訪問(wèn)者的權(quán)限,編號(hào)可以重復(fù)、必須有客戶才能建立定單這樣的規(guī)則。所有這些,對(duì)于工作在前臺(tái)程序上的最終用戶,是“透明”的,他們無(wú)須過(guò)問(wèn)(通常也無(wú)法干涉)背后的過(guò)程,就可以完成自
32、己的一切工作。在客戶服務(wù)器架構(gòu)的應(yīng)用中,前臺(tái)程序不是非?!笆菪 ?,麻煩的事情都交給了服務(wù)器和網(wǎng)絡(luò)。在C/S體系下,數(shù)據(jù)庫(kù)不能真正成為公共、專業(yè)化的倉(cāng)庫(kù),它受到獨(dú)立的專門(mén)管理。隨著互聯(lián)網(wǎng)的飛速發(fā)展,移動(dòng)辦公和分布式辦公越來(lái)越普與,這需要我們的系統(tǒng)具有擴(kuò)展性。這種方式遠(yuǎn)程訪問(wèn)需要專門(mén)的技術(shù),同時(shí)要對(duì)系統(tǒng)進(jìn)行專門(mén)的設(shè)計(jì)來(lái)處理分布式的數(shù)據(jù)??蛻舳诵枰惭b專用的客戶端軟件。首先涉與到安裝的工作量,其次任何一臺(tái)電腦出問(wèn)題,如病毒、硬件損壞,都需要進(jìn)行安裝或維護(hù)。特別是有很多分部或?qū)Yu店的情況,不是工作量的問(wèn)題,而是路程的問(wèn)題。還有,系統(tǒng)軟件升級(jí)時(shí),每一臺(tái)客戶機(jī)需要重新安裝,其維護(hù)和升級(jí)成本非常高。對(duì)客戶端
33、的操作系統(tǒng)一般也會(huì)有限制??赡苓m應(yīng)于Win98, 但不能用于win2000或Windows XP?;蛘卟贿m用于微軟新的操作系統(tǒng)等等,更不用說(shuō)Linux、Unix等。傳統(tǒng)的c/s體系結(jié)構(gòu)雖然采用的是開(kāi)放模式,但這只是系統(tǒng)開(kāi)發(fā)一級(jí)的開(kāi)放性,在特定的應(yīng)用中無(wú)論是Client端還是Server端都還需要特定的軟件支持。由于沒(méi)能提供用戶真 正期望的開(kāi)放環(huán)境,C/S結(jié)構(gòu)的軟件需要針對(duì)不同的操作系統(tǒng)開(kāi)發(fā)不同版本的軟件, 加之產(chǎn)品的更新?lián)Q代十分快,已經(jīng)很難適應(yīng)百臺(tái)電腦以上局域網(wǎng)用戶同時(shí)使用。而且代價(jià)高, 效率低。C/S架構(gòu)的劣勢(shì)還有高昂的維護(hù)成本且投資大。首先,采用C/S架構(gòu),要選擇適當(dāng)?shù)臄?shù)據(jù)庫(kù)平臺(tái)來(lái)實(shí)現(xiàn)數(shù)據(jù)
34、庫(kù)數(shù)據(jù)的真正“統(tǒng)一”,使分布于兩地的數(shù)據(jù)同步完全交由數(shù)據(jù)庫(kù)系統(tǒng)去管理,但邏輯上兩地的操作者要直接訪問(wèn)同一個(gè)數(shù)據(jù)庫(kù)才能有效實(shí)現(xiàn),有這樣一些問(wèn)題,如果需要建立“實(shí)時(shí)”的數(shù)據(jù)同步,就必須在兩地間建立實(shí)時(shí)的通訊連接,保持兩地的數(shù)據(jù)庫(kù)服務(wù)器在線運(yùn)行,網(wǎng)絡(luò)管理工作人員既要對(duì)服務(wù)器維護(hù)管理,又要對(duì)客戶端維護(hù)和管理,這需要高昂的投資和復(fù)雜的技術(shù)支持,維護(hù)成本很高,維護(hù)任務(wù)量大。其次,傳統(tǒng)的C/S結(jié)構(gòu)的軟件需要針對(duì)不同的操作系統(tǒng)系統(tǒng)開(kāi)發(fā)不同版本的軟件,由于產(chǎn)品的更新?lián)Q代十分快,代價(jià)高和低效率已經(jīng)不適應(yīng)工作需要。在JAVA這樣的跨平臺(tái)語(yǔ)言出現(xiàn)之后,B/S架構(gòu)更是猛烈沖擊C/S,并對(duì)其形成威脅和挑戰(zhàn)。2.7 多線程
35、技術(shù)介紹多線程是指從軟件或者硬件上實(shí)現(xiàn)多個(gè)線程并發(fā)執(zhí)行的技術(shù)。具有多線程能力的計(jì)算機(jī)因有硬件支持而能夠在同一時(shí)間執(zhí)行多于一個(gè)執(zhí)行緒,進(jìn)而提升整體處理性能。具有這種能力的系統(tǒng)包括對(duì)稱多處理器、多核心處理器以與芯片級(jí)多處理器(Chip-level multithreading)或同時(shí)多線程(Simultaneous multithreading)處理器。 軟件多線程。即便處理器只能運(yùn)行一個(gè)線程,操作系統(tǒng)也可以通過(guò)快速的在不同線程之間進(jìn)行切換,由于時(shí)間間隔很小,來(lái)給用戶造成一種多個(gè)線程同時(shí)運(yùn)行的假象。這樣的程序運(yùn)行機(jī)制被稱為軟件多線程。如微軟的Windows作業(yè)系統(tǒng)和Linux就是在各個(gè)不同的執(zhí)行緒
36、間來(lái)回切換,被稱為單人多任務(wù)作業(yè)系統(tǒng)。而DOS這類文字接口作業(yè)系統(tǒng)在一個(gè)時(shí)間只能處理一項(xiàng)工作,被視為單人單工作業(yè)系統(tǒng)。除此之外,許多系統(tǒng)與處理器也支持硬件多線程技術(shù)。對(duì)稱多處理機(jī)(SMP)系統(tǒng)具有多個(gè)處理器,所以具有真正的同時(shí)執(zhí)行多個(gè)線程的能力;CMP技術(shù)通過(guò)在一塊芯片上集成多個(gè)核心也具有真正的多線程能力;CMT技術(shù)則稍有不同,有的是依靠硬件執(zhí)行線程切換來(lái)獲得多線程能力,操作系統(tǒng)不再負(fù)責(zé)線程切換,因而這部分開(kāi)銷可以減少甚至消除,這方面典型的例子是Sun的UltraSPARCT1,它同時(shí)綜合了CMP和CMT。微軟的Windows 2000以后的操作系統(tǒng)皆支持多線程與超線程技術(shù)。3. 系統(tǒng)設(shè)計(jì)3.
37、1系統(tǒng)分析3.1.1 功能需求分析即時(shí)通信系統(tǒng)是基于c/s模型的網(wǎng)絡(luò)通信軟件,分為客戶端和服務(wù)器端兩個(gè)部分??蛻舳艘揽糠?wù)器獲取所需的網(wǎng)絡(luò)資源,服務(wù)器為客戶端提供必需的網(wǎng)絡(luò)資源。服務(wù)器端包含數(shù)據(jù)庫(kù)模塊和消息處理兩個(gè)模塊;數(shù)據(jù)庫(kù)模塊用于存儲(chǔ)用戶個(gè)人信息、用戶好友列表、和用戶連接信息;消息處理模塊包含查看好友資料、注冊(cè)處理、登錄處理、聊天處理、修改個(gè)人信息、添加好友、刪除好友。具體功能結(jié)構(gòu)圖如圖3.1圖3.1 服務(wù)器功能模塊圖客戶端包含登錄和注冊(cè)兩個(gè)部分;登錄模塊包括用戶信息修改、好友管理、消息功能三個(gè)模塊。用戶信息修改模塊:實(shí)現(xiàn)修改個(gè)人信息。好友管理模塊:實(shí)現(xiàn)好友的分組顯示、添加好友、刪除好友、
38、查看好友資料。消息功能模塊:實(shí)現(xiàn)發(fā)送消息、接收消息、聊天記錄??蛻舳斯δ苣K結(jié)構(gòu)如圖3.2圖3.2 客戶端功能模塊圖3.1.2 性能需求分析即時(shí)性用戶之間通信時(shí)彼此的聊天信息能即時(shí)的傳送給對(duì)方。服務(wù)器的消息記錄能即時(shí)的更新。系統(tǒng)友好性登錄界面、聊天窗口、好友信息資料界面、好友在線狀態(tài)界面要美觀簡(jiǎn)潔,友好大方,操作簡(jiǎn)單合理恰當(dāng)。安全性用戶需要服務(wù)器提供相關(guān)服務(wù)時(shí)需通過(guò)服務(wù)器的身份驗(yàn)證來(lái)獲取相關(guān)服務(wù)。以此來(lái)提高系統(tǒng)的安全性??蓴U(kuò)展性可以很容易擴(kuò)展系統(tǒng)功能和系統(tǒng)功能的更新。3.1.3 數(shù)據(jù)需求分析本系統(tǒng)服務(wù)器端需要用到MySQL數(shù)據(jù)庫(kù);以此來(lái)存放用戶的個(gè)人信息、用戶好友列表、客戶端與服務(wù)器通信的登錄
39、信息與網(wǎng)絡(luò)連接信息。相關(guān)數(shù)據(jù)庫(kù)表如下:用戶信息表userinfo:名稱字段類型長(zhǎng)度說(shuō)明賬戶useridvarchar24Primary key ,not null密碼UserpwdVarchar24Not null昵稱userNickvarchar24Not nulluserNamevarchar24Not null性別userSexvarchar24Not null年齡userAgeint 12Not null個(gè)人簽名iDiographvarchar48所在地cityvarchar24聯(lián)系方式phonenumbervarchar24在線狀態(tài)statusint12Other1Other2 Ot
40、her3網(wǎng)絡(luò)連接表connectinfo:名稱字段類型長(zhǎng)度說(shuō)明賬戶(id)userIdvarchar24Primary key,not nullIp地址ipAddressvarchar24Not null端口Portint12Not null用戶登錄表friendtable:名稱字段類型長(zhǎng)度說(shuō)明當(dāng)前賬戶userIdvarchar24Primary key,Not null賬號(hào)friendidvarchar24not null備注remarkvarchar24好友類型friendkindint12好友總數(shù)friendtotalint12昵稱nicknamevarchar24好友狀態(tài)statusi
41、nt123.2 系統(tǒng)設(shè)計(jì)3.2.1工作流程本系統(tǒng)由服務(wù)器先啟動(dòng)。然后客戶端通過(guò)已經(jīng)注冊(cè)的賬號(hào)和密碼來(lái)登錄服務(wù)器,登錄成功后客戶端從服務(wù)器獲取用戶信息和好友列表,客戶端向服務(wù)器發(fā)送相應(yīng)的請(qǐng)求可以實(shí)現(xiàn)對(duì)用戶的信息修改、好友的添加、刪除、查看好友的資料、聊天等一系列操作。聊天時(shí)客戶端向服務(wù)器請(qǐng)求好友的連接信息,客戶端得到好友的連接信息后再利用此信息將聊天信息發(fā)送給好友.3.2.2服務(wù)器設(shè)計(jì)登錄驗(yàn)證:服務(wù)器接收客戶端發(fā)來(lái)的賬戶和密碼,創(chuàng)建一個(gè)通信線程來(lái)接收客戶端的請(qǐng)求。在線程中實(shí)行數(shù)據(jù)庫(kù)中的用戶信息賬戶和密碼的比對(duì),判斷登錄認(rèn)證通過(guò)與否與用戶是否在線;認(rèn)證通過(guò)后將用戶的好友列表與用戶的個(gè)人信息返回給客
42、戶端之后才能實(shí)現(xiàn)正常在線、好友聊天、添加好友、刪除好友、修改個(gè)人信息等操作??蛻舳诉B接信息存儲(chǔ):客戶端登陸成功后將客戶端的賬號(hào)、ip地址以與端口號(hào)存入數(shù)據(jù)庫(kù)中的客戶端的連接信息表中,并將數(shù)據(jù)庫(kù)用戶信息表的中的用戶狀態(tài)置為1;當(dāng)客戶端退出登錄時(shí)將客戶端的賬號(hào)、ip地址與端口號(hào)從數(shù)據(jù)庫(kù)中的連接信息表中刪除,并將數(shù)據(jù)庫(kù)中用戶信息表中的用戶狀態(tài)置為0。用戶注冊(cè):客戶端發(fā)來(lái)注冊(cè)請(qǐng)求時(shí),服務(wù)器將用戶的注冊(cè)信息存入數(shù)據(jù)庫(kù)的用戶信息表中,并通知用戶注冊(cè)成功與否。添加好友:服務(wù)器收到添加好友請(qǐng)求后將好友存入數(shù)據(jù)庫(kù)中的好友列表。刪除好友:服務(wù)器收到刪除好友請(qǐng)求后將好友從數(shù)據(jù)庫(kù)中的好友列表刪除。查看好友信息:服務(wù)器
43、收到查看好友信息請(qǐng)求時(shí),從數(shù)據(jù)庫(kù)中的用戶信息表中查詢好友信息,再將查詢的信息發(fā)送到對(duì)應(yīng)的用戶。修改用戶信息:服務(wù)器收到用戶信息修改請(qǐng)求時(shí)將相應(yīng)的數(shù)據(jù)庫(kù)中的用戶信息表更新。好友聊天:服務(wù)器收到聊天請(qǐng)求時(shí)在數(shù)據(jù)中查詢好友的連接信息并將好友的ip地址與端口號(hào)返回給用戶。3.2.3客戶端設(shè)計(jì)用戶登錄:從客戶端輸入登錄信息判斷賬號(hào)密碼不為空時(shí)才向服務(wù)器發(fā)送登錄請(qǐng)求。用戶注冊(cè):客戶端在注冊(cè)界面填寫(xiě)用戶注冊(cè)信息后在把填寫(xiě)的信息發(fā)送給服務(wù)器。注冊(cè)成功后在登錄界面輸入賬號(hào)和密碼就可以登錄。用戶信息修改:客戶端點(diǎn)擊修改個(gè)人信息按鈕,出現(xiàn)填寫(xiě)個(gè)人信息資料的窗體,將要修改的個(gè)人信息填寫(xiě)到窗體的列表中,再將修改的個(gè)人信
44、息發(fā)送到數(shù)據(jù)庫(kù)中。好友分組:客戶端登錄服務(wù)器驗(yàn)證通過(guò)后,客戶端收到來(lái)自服務(wù)器的好友列表信息,客戶端對(duì)好友進(jìn)行分組顯示與好友狀態(tài)顯示。雙擊分組可以展開(kāi)或收攏分組。添加好友:用戶在主界面點(diǎn)擊添加好友按鈕出現(xiàn)添加好友的界面。在該界面中填寫(xiě)好友的賬號(hào)即可實(shí)現(xiàn)好友的添加。刪除好友:用戶在好友列表的好友信息一欄上點(diǎn)擊右鍵即可實(shí)現(xiàn)好友的的刪除。查看好友資料:用戶在好友列表的好友信息一欄上點(diǎn)擊右鍵,選擇查看資料就可以發(fā)送查看好友資料的請(qǐng)求。并將服務(wù)器發(fā)來(lái)的好友資料信息以列表的形式加入窗體顯示。聊天:用戶在好友列表的好友信息一欄上點(diǎn)擊右鍵,如果好友在線選擇聊天客戶端就會(huì)發(fā)送請(qǐng)求獲取好友的ip地址和端口號(hào)。服務(wù)器
45、收到請(qǐng)求后就發(fā)送連接信息給相應(yīng)的客戶端,客戶端利用此連接信息與好友實(shí)現(xiàn)通信聊天。聊天時(shí)有聊天窗體,聊天窗體包括與好友聊天的聊天記錄顯示,用戶發(fā)送聊天信息的發(fā)送編輯區(qū)域與與哪個(gè)好友聊天的標(biāo)題。4 系統(tǒng)關(guān)鍵技術(shù)實(shí)現(xiàn)4.1服務(wù)器實(shí)現(xiàn)服務(wù)器主要有myServer類、myThread類和MainWindow類;其中MainWindow類主要實(shí)現(xiàn)服務(wù)器窗口顯示、開(kāi)啟、關(guān)閉。myServer類主要實(shí)現(xiàn)通信線程的創(chuàng)建、刪除。myThread類主要實(shí)現(xiàn)通信的處理,即從客戶端接收請(qǐng)求消息、數(shù)據(jù)庫(kù)處理、向客戶端發(fā)送消息。 服務(wù)器連接數(shù)據(jù)庫(kù)關(guān)鍵代碼: int main(int argc, char *argv) QA
46、pplication a(argc, argv); db=QSqlDatabase:addDatabase("QMYSQL"); db.setHostName("localhost"); db.setUserName("root"); db.setPassword("root"); db.setDatabaseName("db_user"); bool ok=db.open(); qDebug()<<db.driver(); qDebug()<<db.userName()
47、; if(ok) qDebug()<<"open database success" else qDebug()<<"error open database because"<<db.lastError().text(); MainWindow w; w.show(); return a.exec(); 當(dāng)服務(wù)器啟動(dòng)時(shí)創(chuàng)建服務(wù)器啟動(dòng)界面,點(diǎn)擊啟動(dòng)服務(wù)器進(jìn)入監(jiān)聽(tīng)狀態(tài),界面顯示服務(wù)器的ip地址和端口號(hào)。其關(guān)鍵代碼如下:void MainWindow:openServer() if(!server->listen(QH
48、ostAddress:LocalHost,9901) QMessageBox:critical(this,tr("多線程服務(wù)器"), tr("無(wú)法啟動(dòng):%1.").arg(server->errorString(); close(); return; else ui->serverStatuslabel->setText(tr("服務(wù)器運(yùn)行在端口:%1.n").arg(server->serverPort(); ui->displayEdit->setText(server->serverAd
49、dress().toString(); 如圖4.1所示:圖4.1服務(wù)器端當(dāng)服務(wù)器接收連接請(qǐng)求時(shí)通過(guò)套接字描述符創(chuàng)建一個(gè)單獨(dú)的通信線程,當(dāng)客戶端失去連接時(shí)刪除該通信線程。其關(guān)鍵代碼如下:void myServer:incomingConnection(int socketDescriptor) mythread=new myThread(socketDescriptor,0); connect(mythread,SIGNAL(clientDisconnectSignal(QString),mythread,SLOT(deleteLater(); connect(mythread,SIGNAL(s
50、endchatFinishSignal(),this,SLOT(updateChatMsgSlot(); connect(mythread,SIGNAL(receiveChat(Message&),this,SLOT(getMsgFromList(Message&); connect(this->mythread->tcpsocket,SIGNAL(disconnected(),this->mythread,SLOT(disconnectProcees(); mythread->start();myThread類的主要槽與信號(hào):槽:槽與成員函數(shù)返回值功能
51、disconnectProcees()void客戶端失去連接時(shí)進(jìn)行相應(yīng)的數(shù)據(jù)庫(kù)處理receiveData()void接收客戶端的請(qǐng)求sendData(Message &msg)void響應(yīng)客戶端的請(qǐng)求,將反饋的信息發(fā)送給客戶端sqlProcess(Message &msg)void數(shù)據(jù)庫(kù)處理信號(hào):信號(hào)返回值功能loginSuccessSignal(Message&)void登錄成功信號(hào)getFriendTable(Message&)void獲取好友列表信號(hào)registerSuccessSignal(Message&)void注冊(cè)成功的信號(hào)getinfoF
52、inishSignal(Message&)void獲取用戶成功信號(hào)clientDisconnectSignal(QString)void客戶端失去連接信號(hào)客戶端在失去連接時(shí)調(diào)用disconnectProcees()槽函數(shù)更新數(shù)據(jù)庫(kù)信息關(guān)鍵代碼:QSqlQuery query(db); query.prepare("UPDATE userinfo SET status = 0 WHERE userid = :userid"); query.bindValue(":userid",sourceid); query.exec(); qDebug()&l
53、t;<query.size(); qDebug()<<"client id "<<sourceid<<"has disconnect" query.prepare("delete from connectinfo where userid=:userid"); query.bindValue(":userid",sourceid); query.exec(); qDebug()<<"delete connectinfo table success&qu
54、ot; emit clientDisconnectSignal(sourceid);4.2 客戶端實(shí)現(xiàn) 客戶端主要有addfriendForm類、chatForm 類、friendInfoForm類、ListWidget類、Form類、registerForm類和Widget類。Widget類實(shí)現(xiàn)用戶登錄界面,與服務(wù)器建立連接,向服務(wù)器發(fā)送請(qǐng)求消息以與接收服務(wù)器反饋的消息,通過(guò)信號(hào)與槽關(guān)聯(lián)其他類的槽函數(shù)和信號(hào)。ListWidget類實(shí)現(xiàn)創(chuàng)建好友列表與好友中右鍵菜單欄顯示與相應(yīng)功能的部分實(shí)現(xiàn)。addfriendForm類實(shí)現(xiàn)創(chuàng)建好友添加界面。chatForm類實(shí)現(xiàn)聊天界面的創(chuàng)建。register
55、Form類實(shí)現(xiàn)用戶注冊(cè)界面的創(chuàng)建。friendInfoForm類實(shí)現(xiàn)好友信息顯示界面的創(chuàng)建。Form類實(shí)現(xiàn)客戶端主界面的創(chuàng)建。Widget類主要的槽與信號(hào):槽與主要成員函數(shù)返回值功能 loginrequest()void登錄請(qǐng)求receiveData()void接收消息on_registerButton_clicked()void注冊(cè)賬號(hào)sendData(Message &Data)void向服務(wù)器發(fā)送消息addFriendslot()void創(chuàng)建添加好友界面friendInforFormvoid創(chuàng)建好友信息界面信號(hào)返回值功能createFriendChat(chatwithFrien
56、d&)void創(chuàng)建聊天界面信號(hào)Form類主要槽與信號(hào):槽與主要成員函數(shù)返回值功能createFriendchatSlot(chatwithFriend &pi)void創(chuàng)建好友聊天界面recUdpMessage()void接收聊天消息ListWidget類主要的槽與信號(hào):槽與主要成員函數(shù)返回值功能scan_friendSlot()void獲取好友id,改變消息類型deleteactionSlot()void獲取好友id,改變消息類型startChatSlot()void獲取好友id,改變消息類型,觸發(fā)startChatSignal(Message)信號(hào)getfriendid(QString cl)void處理獲取的字符串得到好友id信號(hào)返回值功能 getfriendinfoSignal(Message &
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030全球風(fēng)電用工業(yè)碳刷行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025-2030全球服裝金屬探測(cè)器行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國(guó)高性能航空涂料行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國(guó)眼科手術(shù)剪行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025公路工程進(jìn)度、計(jì)量、合同管理監(jiān)理內(nèi)容
- 餐桌茶幾家具買賣合同
- 年貨物運(yùn)輸合同范本
- 2025合同模板合伙協(xié)議范本
- 大米購(gòu)銷的合同
- 物聯(lián)網(wǎng)系統(tǒng)定制與開(kāi)發(fā)合同
- 確定項(xiàng)目干系人(表格)
- 渠道管理就這樣做
- 大客戶銷售這樣說(shuō)這樣做
- 精裝修樣板房房屋使用說(shuō)明
- 喬遷新居結(jié)婚典禮主持詞
- 小學(xué)四年級(jí)數(shù)學(xué)競(jìng)賽試題(附答案)
- 魯科版高中化學(xué)必修2全冊(cè)教案
- 《病理學(xué)基礎(chǔ)》知識(shí)考核試題題庫(kù)與答案
- 人口分布 高一地理下學(xué)期人教版 必修第二冊(cè)
- 四年級(jí)上冊(cè)英語(yǔ)試題-Module 9 Unit 1 What happened to your head--外研社(一起)(含答案)
- 子宮內(nèi)膜異位癥診療指南
評(píng)論
0/150
提交評(píng)論