亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于C/S架構(gòu)的QT局域網(wǎng)通信工具設(shè)計(jì)

        2012-04-29 00:00:00唐強(qiáng)

        摘要:隨著互聯(lián)網(wǎng)技術(shù)的迅猛發(fā)展,網(wǎng)絡(luò)給人們帶來(lái)了很多便利,比如人們借助于網(wǎng)絡(luò)進(jìn)行相互交流變得更加方便。聊天工具作為互聯(lián)網(wǎng)中運(yùn)用最為廣泛的通信工具之一,如今都已被廣大網(wǎng)民接受。很多人都使用過(guò)局域網(wǎng)即時(shí)通訊軟件,局域網(wǎng)即時(shí)通訊工具發(fā)展到現(xiàn)在已經(jīng)具有了很多功能:有文字聊天、文件、文件夾傳輸?shù)幕竟δ埽灿忻芊?、加鎖等較為復(fù)雜的功能。

        關(guān)鍵詞:局域網(wǎng);即時(shí)通信;套接字;QT、TCP/IP

        中圖分類號(hào):TP393.1 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9599 (2012) 21-0000-02

        1 系統(tǒng)概述

        Qt局域網(wǎng)通信工具是Windows環(huán)境下的一款即時(shí)通信工具,與Windows下的飛鵒傳書功能相似。該款工具可用于公司內(nèi)部員工之間進(jìn)行信息交換,如文件傳輸、信息廣播、即時(shí)通信等功能,讓員工可以通過(guò)公司內(nèi)部網(wǎng)絡(luò)實(shí)現(xiàn)自我管理,提高了整體運(yùn)作效能。

        本系統(tǒng)采用基于Socket的局域網(wǎng)通信工具的設(shè)計(jì)與實(shí)現(xiàn)的方法?;赟ocket的局域網(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),它的使用能有效地降低局域網(wǎng)通信負(fù)荷,提高局域網(wǎng)的使用效率,可以很好地解決企業(yè)內(nèi)部局域網(wǎng)的各種通信需求。

        基于Socket的局域網(wǎng)聊天工具很好地詮釋了Socket通信的原理,并且在企業(yè)內(nèi)部通信、教學(xué)、討論等應(yīng)用中都具有一定的實(shí)用價(jià)值。它具有信息收發(fā)速度快,保密性好,占用網(wǎng)絡(luò)帶寬資源低,占用服務(wù)器吞吐能力低,易于編程實(shí)現(xiàn)等優(yōu)點(diǎn)。

        基于Socket的局域網(wǎng)通信軟件應(yīng)用范圍廣闊,不但可以處理傳統(tǒng)的通信需求,而且也能擴(kuò)展以適應(yīng)新型的網(wǎng)絡(luò)應(yīng)用,如網(wǎng)絡(luò)教育,數(shù)據(jù)影音傳輸?shù)龋瑩碛袕V泛的應(yīng)用前景。

        2 需求分析

        聊天交流是目前互聯(lián)網(wǎng)提供的主要內(nèi)容。聊天系統(tǒng)有多種實(shí)現(xiàn)方式,類似ICQ屬于一種點(diǎn)對(duì)點(diǎn)的聊天系統(tǒng);還有一種是基于Socket的集中式聊天系統(tǒng),這種聊天系統(tǒng)需要登陸統(tǒng)一的聊天服務(wù)器。在基于Socket的聊天系統(tǒng)中,主要有兩種角色:服務(wù)器和客戶端,不同的客戶端登陸集中式的服務(wù)器,通過(guò)服務(wù)器將一個(gè)客戶端發(fā)出的信息推送到其他所有客戶端。基于Socket的聊天系統(tǒng)最早實(shí)現(xiàn)是使用網(wǎng)頁(yè)刷新方式,通過(guò)客戶端不斷地自動(dòng)刷新,服務(wù)器端整個(gè)頁(yè)面內(nèi)容下載到客戶端顯示,這種方式的聊天速度慢,而且有刷屏現(xiàn)象,很快被更新的聊天技術(shù)所替代。聊天系統(tǒng)在客戶端和服務(wù)器之間主要傳送的是文字信息,服務(wù)器端只需要把最近的文字信息推送到客戶端,這樣減少了網(wǎng)絡(luò)傳輸內(nèi)容,節(jié)省了網(wǎng)絡(luò)傳輸?shù)臅r(shí)間,無(wú)疑提高了聊天速度。這種“推”技術(shù)是目前基于Socket聊天系統(tǒng)的主要實(shí)現(xiàn)技術(shù)。

        在基于Socket的聊天系統(tǒng),客戶端和服務(wù)器必須保持隨時(shí)隨地的連接。這有別于普通Web瀏覽的連接方式。在使用瀏覽器訪問(wèn)服務(wù)器時(shí),先由客戶端發(fā)出HTTP協(xié)議,然后服務(wù)器響應(yīng)處理這個(gè)客戶端的響應(yīng),再返回處理結(jié)果;請(qǐng)求(Request)和響應(yīng)(Response)是一種一對(duì)一的前后因果關(guān)系。而在基于Socket的聊天系統(tǒng)中,客戶端發(fā)出聊天信息的同時(shí),客戶端也在接受服務(wù)器發(fā)送過(guò)來(lái)的其他人的聊天信息,因此,請(qǐng)求和響應(yīng)不存在那種前后對(duì)應(yīng)關(guān)系,是兩種分別獨(dú)立進(jìn)行的進(jìn)程。因?yàn)榉?wù)器任何時(shí)候都可能發(fā)送信息到客戶端,因此,客戶端和服務(wù)器一旦建立連接,必須能讓服務(wù)器在以后發(fā)送中尋找定位到這個(gè)連接。局域網(wǎng)聊天系統(tǒng)使該系統(tǒng)的用戶能夠通過(guò)客戶端登入到該系統(tǒng),然后直接與系統(tǒng)交互。

        3 體系結(jié)構(gòu)設(shè)計(jì)

        通常的通信工具,都采用客戶機(jī)/服務(wù)器(C/S)體系結(jié)構(gòu),C/S結(jié)構(gòu)是這樣的一種結(jié)構(gòu):它包括一個(gè)客戶機(jī)(或前端),一個(gè)服務(wù)器(或稱后端),客戶機(jī)的作用是訪問(wèn)和處理遠(yuǎn)程服務(wù)器上的數(shù)據(jù),服務(wù)器的作用是接收和處理客戶機(jī)的數(shù)據(jù)請(qǐng)求。有時(shí),可能有多個(gè)客戶向同一個(gè)服務(wù)器同時(shí)請(qǐng)求服務(wù),這就需要服務(wù)器決定怎樣處理這些請(qǐng)求。Client/Server結(jié)構(gòu)是當(dāng)前數(shù)據(jù)庫(kù)應(yīng)用程序中極為流行的一種方式。尤其是網(wǎng)絡(luò)技術(shù)的發(fā)展,使得當(dāng)前很多系統(tǒng)都采用這種方式進(jìn)行構(gòu)造,其最大的優(yōu)點(diǎn)是將計(jì)算機(jī)工作任務(wù)分別由客戶端和服務(wù)器端來(lái)共同完成,這樣有利于充分合理的利用系統(tǒng)資源。另外它的服務(wù)器端還可以將信息集中起來(lái),任何客戶機(jī)都可以通過(guò)訪問(wèn)服務(wù)器而獲得所需的信息。Client/Server模型最終可歸結(jié)為一種“請(qǐng)求/應(yīng)答”關(guān)系。一個(gè)請(qǐng)求總是首先被客戶發(fā)出,然后服務(wù)器總是被動(dòng)地接收請(qǐng)求,返回客戶需要的結(jié)果。在客戶發(fā)出一個(gè)請(qǐng)求之前,服務(wù)進(jìn)程一直處于休眠狀態(tài)。一個(gè)客戶提出請(qǐng)求后,服務(wù)進(jìn)程被“喚醒”并且為客戶提供服務(wù),對(duì)客戶的請(qǐng)求做出所需要的應(yīng)答。

        4 功能模塊劃分

        4.1 其中主線程模塊完成對(duì)網(wǎng)絡(luò)的初始化,然后啟動(dòng)兩個(gè)子線程:服務(wù)端監(jiān)聽(tīng)線程以及網(wǎng)絡(luò)掃描模塊線程,然后由網(wǎng)絡(luò)掃描模塊得到當(dāng)前的網(wǎng)絡(luò)用戶分布情況,并填充相關(guān)的數(shù)據(jù)結(jié)構(gòu),然后生成用戶列表界面顯示給用戶。

        4.2 通信模塊又包括兩個(gè)子模塊:數(shù)據(jù)接收模塊和數(shù)據(jù)發(fā)送模塊,這兩個(gè)模塊都由系統(tǒng)定義的網(wǎng)絡(luò)事件來(lái)觸發(fā)。

        4.3 輸入/輸出模塊用來(lái)響應(yīng)用戶雙擊用戶列表的某一項(xiàng)要準(zhǔn)備發(fā)送信息時(shí)的消息,以及當(dāng)系統(tǒng)接收到某個(gè)網(wǎng)絡(luò)用戶發(fā)送來(lái)的消息,要將其顯示給用戶的時(shí)候。

        4.4 網(wǎng)絡(luò)掃描模塊是由主線程模塊啟動(dòng),進(jìn)行網(wǎng)絡(luò)掃描,確定哪些用戶當(dāng)前處于可到達(dá)狀態(tài),以及哪些可到達(dá)狀態(tài)的用戶安裝有相應(yīng)的通信軟件,并啟動(dòng)之可以與之進(jìn)行通信。

        5 開(kāi)發(fā)技術(shù)

        5.1 WINDOWS SOCKETS網(wǎng)絡(luò)編程接口

        選定WINDOWS平臺(tái)開(kāi)發(fā)網(wǎng)絡(luò)通信程序,可以選擇WINDOWS的SOCKETS編程接口,Windows Sockets是一套開(kāi)放的、支持多種協(xié)議的Windows下的網(wǎng)絡(luò)編程接口。現(xiàn)在的Winsock已經(jīng)基本上實(shí)現(xiàn)了與協(xié)議無(wú)關(guān),你可以使用Winsock來(lái)調(diào)用多種協(xié)議的功能,但較常使用的是TCP/IP協(xié)議。Windows sockets無(wú)疑是我們進(jìn)行網(wǎng)絡(luò)編程的利器。所有的Windows Sockets實(shí)現(xiàn)都支持流套接口和數(shù)據(jù)報(bào)套接口。應(yīng)用程序調(diào)用Windows Sockets的API實(shí)現(xiàn)相互之間的通訊。Windows Sockets又利用下層的網(wǎng)絡(luò)通訊協(xié)議功能和操作系統(tǒng)調(diào)用實(shí)現(xiàn)實(shí)際的通訊工作。

        5.2 TCP/IP協(xié)議、TCP協(xié)議

        網(wǎng)際協(xié)議IP是TCP/IP的心臟,也是網(wǎng)絡(luò)層中最重要的協(xié)議。TCP(Transmission Control Protocol,傳輸控制協(xié)議)是一種面對(duì)連接和數(shù)據(jù)流的可靠傳輸協(xié)議。它是許多高層應(yīng)用協(xié)議的基礎(chǔ)。TCP協(xié)議能為應(yīng)用程序提供可靠的通信連接,使一臺(tái)計(jì)算機(jī)發(fā)出的字節(jié)流無(wú)差錯(cuò)地發(fā)往網(wǎng)絡(luò)上的其他計(jì)算機(jī),因此對(duì)可靠性要求高的數(shù)據(jù)通信系統(tǒng)往往使用TCP協(xié)議傳輸數(shù)據(jù),但在正式收發(fā)數(shù)據(jù)前,通信雙方必須建立連接。

        QT提供了QTcpSocket類和QTcpServer類用于編寫TCP客戶端和服務(wù)器應(yīng)用程序。QTcpSocket類提供了TCP協(xié)議的通用接口,可以用來(lái)實(shí)現(xiàn)其他標(biāo)準(zhǔn)協(xié)議。

        首先啟動(dòng)服務(wù)器,稍后的某個(gè)時(shí)刻啟動(dòng)客戶端,它與此服務(wù)器經(jīng)過(guò)三次握手后建立連接。此后的一段時(shí)間內(nèi),客戶端向服務(wù)器發(fā)送一個(gè)請(qǐng)求,服務(wù)器處理這個(gè)請(qǐng)求,并且給客戶端發(fā)回一個(gè)響應(yīng)。這個(gè)過(guò)程一直持續(xù)下去,直到客戶端給服務(wù)器發(fā)一個(gè)文件結(jié)束符,并關(guān)閉客戶端連接,接著服務(wù)器也關(guān)閉服務(wù)端的連接,結(jié)束運(yùn)行或等待一個(gè)新的客戶端連接。

        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ī)的地址(目的地址)。

        如果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),所以未按照順序收到的包可以被排序,而損壞的包可以被重傳。

        UDP與TCP位于同一層,但對(duì)于數(shù)據(jù)包的順序錯(cuò)誤或重發(fā)。因此,UDP不被應(yīng)用于那些使用虛電路的面向連接的服務(wù),UDP主要用于那些面向查詢---應(yīng)答的服務(wù).

        TCP和UDP服務(wù)通常有一個(gè)客戶/服務(wù)器的關(guān)系。兩個(gè)系統(tǒng)間的多重連接是這樣相互確認(rèn)并協(xié)調(diào)一致的,TCP或UDP連接唯一地使用每個(gè)信息中的如下四項(xiàng)進(jìn)行確認(rèn):

        源IP地址 發(fā)送包的IP地址。

        目的IP地址 接收包的IP地址。

        源端口 源系統(tǒng)上的連接的端口。

        目的端口 目的系統(tǒng)上的連接的端口。

        端口是一個(gè)軟件結(jié)構(gòu),被客戶程序或服務(wù)進(jìn)程用來(lái)發(fā)送和接收信息。一個(gè)端口對(duì)應(yīng)一個(gè)16比特的數(shù)。服務(wù)進(jìn)程通常使用一個(gè)固定的端口,因?yàn)樵诮⑴c特定的主機(jī)或服務(wù)的連接時(shí),需要這些地址和目的地址進(jìn)行通訊。

        5.3 P2P

        在P2P 系統(tǒng)中,每一個(gè)Peer 都是平等的參與者,承擔(dān)服務(wù)使用者和服務(wù)提供者兩個(gè)角色。資源的所有權(quán)和控制權(quán)被分散到網(wǎng)絡(luò)的每一個(gè)節(jié)點(diǎn)中。服務(wù)使用者和服務(wù)提供者之間進(jìn)行直接通信,可充分利用網(wǎng)絡(luò)帶寬,減少網(wǎng)絡(luò)的擁塞狀況,使得資源的有效利用率大大提高(包括各種計(jì)算資源和存儲(chǔ)資源)。同時(shí)由于沒(méi)有中央節(jié)點(diǎn)的集中控制,系統(tǒng)的伸縮性較強(qiáng),也能避免單點(diǎn)故障,提高系統(tǒng)的容錯(cuò)性能。但由于P2P網(wǎng)絡(luò)的分散性、自治性、動(dòng)態(tài)性等特點(diǎn),造成了某些情況下Peer的訪問(wèn)結(jié)果是不可預(yù)見(jiàn)的,例如,一個(gè)請(qǐng)求可能得不到任何應(yīng)答消息的反饋。通常情況下圖形用戶界面應(yīng)用程序是一個(gè)可執(zhí)行線程,并且一次執(zhí)行一個(gè)操作。如果用戶在單線程的應(yīng)用程序中從用戶界面中調(diào)用一個(gè)耗時(shí)的操作,當(dāng)這個(gè)操作被執(zhí)行的時(shí)候,用戶界面通常會(huì)凍結(jié)。當(dāng)遇到這種問(wèn)題時(shí),就要考慮使用多線程了。

        5.4 多線程編程

        在一個(gè)多線程的QT程序中,這個(gè)圖形用戶界面在它自己的線程中運(yùn)行,并且處理會(huì)發(fā)生在一個(gè)或多個(gè)其他線程中。這樣做之后,即使處在比較強(qiáng)烈的處理中,應(yīng)用程序也會(huì)響應(yīng)圖形用戶界面。多線程的另外一個(gè)好處是在多處理器的機(jī)器中,不同的線程可以在不同的處理器中同步執(zhí)行,這樣可以獲得更好的性能。多線程具有以下兩點(diǎn)優(yōu)勢(shì):

        (1)可提高應(yīng)用程序的響應(yīng)速度。這對(duì)開(kāi)發(fā)圖形界面的程序尤其重要,當(dāng)一個(gè)操作耗時(shí)很長(zhǎng)時(shí),整個(gè)系統(tǒng)都會(huì)等待這個(gè)操作。而使用多線程技術(shù)可將好耗時(shí)長(zhǎng)的操作置于一個(gè)新的線程,從而避免上述問(wèn)題。

        (2)使多CPU系統(tǒng)更加有效。當(dāng)線程數(shù)不大于CPU數(shù)目時(shí),操作系統(tǒng)可以調(diào)度不同的線程運(yùn)行于不同的CPU上。

        多線程,在QT中使用線程十分簡(jiǎn)單,只需要繼承QThread類并重新實(shí)現(xiàn)其run()函數(shù),只需在run()函數(shù)中填寫所需代碼,然后創(chuàng)建一個(gè)實(shí)例,并以QThread::start()函數(shù)啟動(dòng)這個(gè)實(shí)例即可。這樣run()函數(shù)中的功能代碼就運(yùn)行在一個(gè)獨(dú)立的線程中了。

        理论片87福利理论电影| 日本一卡二卡3卡四卡免费观影2022| 99精品国产在热久久无码| 欧美日本国产va高清cabal | 少妇高潮惨叫正在播放对白| 久久中文字幕无码一区二区| 天堂av在线一区二区| 最新国产女主播在线观看| 久久婷婷五月综合色欧美| 永久免费的av在线电影网无码| 亚洲人成网站久久久综合| 婷婷久久亚洲中文字幕| 精人妻无码一区二区三区| 国产成人乱色伦区| 免费黄色福利| 国产一区二区资源在线观看| 无码人妻丰满熟妇啪啪网不卡 | 午夜精品久视频在线观看| 街拍丝袜美腿美女一区| 精品免费国产一区二区三区四区| 天躁夜夜躁狼狠躁| 91精品综合久久久久m3u8| 日本不卡不二三区在线看| 日本中国内射bbxx| 中字幕久久久人妻熟女| 无遮挡很爽视频在线观看| 一区二区在线观看日本视频| 国产精品美女久久久久av超清 | 国产精品反差婊在线观看| 国产成人精品一区二区三区av| 亚洲乱亚洲乱妇无码麻豆| 亚洲国产成人精品女人久久久| 亚洲香蕉av一区二区蜜桃| 亚洲中文字幕在线一区| 粗壮挺进人妻水蜜桃成熟漫画| 久久九九青青国产精品| 97女厕偷拍一区二区三区| av无码国产在线看免费网站| 国产精品丝袜黑色高跟鞋| 黑丝美女喷水在线观看| 国产精品人成在线观看免费|