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

正文內(nèi)容

linux下基于c語(yǔ)言開(kāi)發(fā)的即時(shí)通信軟件畢業(yè)設(shè)計(jì)-文庫(kù)吧

2025-06-08 19:38 本頁(yè)面


【正文】 它們又會(huì)充當(dāng)另外的服務(wù)器的客戶。與此類似,在只從某個(gè)對(duì)象那里請(qǐng)求服務(wù)的意義上,客戶常常也不是“純粹的”客戶:它們常常是客戶-服務(wù)器混合物。例如,客戶可以在服務(wù)器上啟動(dòng)一個(gè)長(zhǎng)時(shí)間運(yùn)行的操作,在啟動(dòng)該操作時(shí),客戶可以向服務(wù)器提供回調(diào)對(duì)象 (callback object ),供服務(wù)器用于在操作完成時(shí)向客戶發(fā)出通知。在這種情況下,客戶在啟動(dòng)操作時(shí)充當(dāng)客戶,而在接收操作完成通知時(shí)充當(dāng)服務(wù)器。這樣的角色反轉(zhuǎn)在許多系統(tǒng)中都很常見(jiàn),所以,許多客戶-服務(wù)器系統(tǒng)常??梢员桓鼫?zhǔn)確地描述為對(duì)等 (peertopeer )系統(tǒng)。 采用UDP方式連接采用UDP協(xié)議的程序不需要有服務(wù)器,兩個(gè)程序之間可以通過(guò)無(wú)連接的方式進(jìn)行通信,所以無(wú)連接是使用UDP協(xié)議程序的一個(gè)顯著特點(diǎn)。使用無(wú)連接協(xié)議的程序和使用面向連接協(xié)議的服務(wù)器程序之間的主要相似之處是它們都必須對(duì)一個(gè)協(xié)議端口進(jìn)行偵聽(tīng)。例如,無(wú)連接和連接服務(wù)器程序必須在協(xié)議端口偵聽(tīng)客戶請(qǐng)求。同樣,由于無(wú)連接客戶程序沒(méi)有和遠(yuǎn)地主機(jī)建立直接連接,所以它也必須對(duì)協(xié)議端口進(jìn)行偵聽(tīng),以便接收以對(duì)它服務(wù)請(qǐng)求產(chǎn)生的數(shù)據(jù)報(bào)應(yīng)答。無(wú)連接客戶程序也對(duì)一個(gè)協(xié)議端口進(jìn)行偵聽(tīng)。使用無(wú)連接協(xié)議的程序不和遠(yuǎn)地主機(jī)建立直接連接。無(wú)連接客戶程序使用數(shù)據(jù)報(bào)發(fā)送網(wǎng)絡(luò)服務(wù)請(qǐng)求,它不建立點(diǎn)到點(diǎn)連接。因此無(wú)連接客戶程序必須在一個(gè)協(xié)議端口,對(duì)應(yīng)答數(shù)據(jù)報(bào)進(jìn)行偵聽(tīng)。Ice 是一種面向?qū)ο蟮闹虚g件平臺(tái)。從根本上說(shuō),這意味著 Ice 為構(gòu)建面 向?qū)ο蟮目蛻簦?wù)器應(yīng)用提供了工具、API 和庫(kù)支持。 Ice 應(yīng)用適合在異種環(huán)境中使用:客戶和服務(wù)器可以用不同的編程語(yǔ)言編寫,可以運(yùn)行在不同的操作系統(tǒng)和機(jī)器架構(gòu)上,并且可以使用多種網(wǎng)絡(luò)技術(shù)進(jìn)行通信。無(wú)論部署環(huán)境如何,這些應(yīng)用的源碼都是可移植的。 采用ICE中間件Ice 提供了一種 RPC 協(xié)議,既可以把 TCP/IP 、也可以把UDP 用作底層傳輸機(jī)制。此外,Ice 還允許你把 SSL 用作傳輸機(jī)制,讓客戶與服務(wù)器間的所有通信都進(jìn)行加密。Ice 協(xié)議定義了: 一些消息類型,比如請(qǐng)求和答復(fù)類型; 協(xié)議狀態(tài)機(jī),確定客戶與服務(wù)器以怎樣的序列交換不同的消息類型,同時(shí)還包括相關(guān)的 TCP/IP 連接建立和關(guān)閉語(yǔ)義;編碼規(guī)則,確定在線路上怎樣表示數(shù)據(jù)的類型每種消息類型的頭,其中含有像這樣的細(xì)節(jié):消息類型、消息尺寸、所使用的協(xié)議及編碼版本。Ice 還支持在線路上進(jìn)行壓縮:通過(guò)設(shè)置一個(gè)配置參數(shù),你可以讓所有的網(wǎng)絡(luò)通信數(shù)據(jù)都被壓縮,從而節(jié)省帶寬。如果你的應(yīng)用要在客戶與服務(wù)器間交換大量數(shù)據(jù),這種功能會(huì)很有用。Ice 協(xié)議適用于構(gòu)建高效的事件轉(zhuǎn)發(fā)機(jī)制,因?yàn)橐朕D(zhuǎn)發(fā)消息,你不需 要了解消息內(nèi)部的詳細(xì)信息。這意味著,消息交換機(jī)不需要對(duì)消息進(jìn)行任 何解編或重整編——它們可以簡(jiǎn)單地把消息當(dāng)作不透明的字節(jié)緩沖區(qū)加以轉(zhuǎn)發(fā)。Ice 協(xié)議還適用于構(gòu)建雙向操作:如果服務(wù)器想要把一條消息發(fā)送給客 戶提供的某個(gè)回調(diào)對(duì)象,這個(gè)回調(diào)對(duì)象可以通過(guò)客戶原來(lái)創(chuàng)建的連接傳給服務(wù)器。如果客戶在防火墻后面,連接只能外出,不能進(jìn)入,這種特性就特別重要。Ice 核心為分布式應(yīng)用開(kāi)發(fā)提供了一個(gè)完善的客戶-服務(wù)器平臺(tái)。但現(xiàn)實(shí)應(yīng)用需要的常常不止是遠(yuǎn)地通信能力:你通常還需要擁有這樣的能力:隨需啟動(dòng)服務(wù)器、把代理分發(fā)給客戶、分發(fā)異步事件、配置你的應(yīng)用、分發(fā)應(yīng)用補(bǔ)丁,等等。在 Ice 中有一些服務(wù),能夠提供上述特性及其他一些特性。這些服務(wù)被實(shí)現(xiàn)成Ice 服務(wù)器,你的應(yīng)用充當(dāng)?shù)氖沁@些服務(wù)器的客戶。這些服務(wù)都沒(méi)有使用 Ice 的任何向應(yīng)用開(kāi)發(fā)者隱藏起來(lái)的內(nèi)部特性,所以在理論上,你可以自行開(kāi)發(fā)等價(jià)的服務(wù)。但讓服務(wù)成為平臺(tái)的一部分,你就可以專注于應(yīng)用開(kāi)發(fā),而不必先構(gòu)建許多基礎(chǔ)設(shè)施。而且,構(gòu)建這樣的服務(wù)所需的工作量是微不足道的,所以你應(yīng)該了解有哪些服務(wù)可用,而不是重新發(fā)明你的輪子。 方案比較綜合以上分析,本軟件開(kāi)發(fā)選擇方案如下:Linux操作系統(tǒng),采用C++開(kāi)發(fā)語(yǔ)言,TCP協(xié)議進(jìn)行連接。采用C/S架構(gòu),運(yùn)用ICE中間件連接服務(wù)器和客戶端。系統(tǒng)界面美觀內(nèi)容豐富,很好的實(shí)現(xiàn)了服務(wù)器與用戶、用戶與用戶的交互。 總體設(shè)計(jì)方案為實(shí)現(xiàn)網(wǎng)絡(luò)聊天的功能,該軟件使用ICE中間件,服務(wù)器與客戶端采用了TCP/IP方式連接,在設(shè)計(jì)聊天方案時(shí),實(shí)行將所有信息發(fā)往服務(wù)器端,再由服務(wù)器進(jìn)行分別處理的思路,服務(wù)器端是所有信息的中心。 服務(wù)器端功能模塊劃分服務(wù)器負(fù)責(zé)向各個(gè)客戶端發(fā)布系統(tǒng)消息。接受來(lái)自客戶端的各種信息并分別處理。針對(duì)這些操作,服務(wù)器做了如下的模塊劃分:處理登陸信息模塊:檢查登陸信息是否正確,并向客戶端返回登陸信息。處理聊天信息模塊:轉(zhuǎn)發(fā)消息給指定的用戶。處理申請(qǐng)信息模塊:通過(guò)用戶申請(qǐng)模塊進(jìn)行新用戶的注冊(cè),保存該用戶信息。發(fā)布系統(tǒng)消息模塊:將消息發(fā)給各客戶端,改寫用戶在服務(wù)器端和客戶端的狀態(tài)。服務(wù)器功能示意圖:服務(wù)器端處理申請(qǐng)信息群發(fā)聊天信息處理登陸信息發(fā)布系統(tǒng)消息圖31 服務(wù)器功能示意圖 客戶端端功能模塊劃分客戶端主要負(fù)責(zé)處理用戶的操作信息,當(dāng)用戶做出相應(yīng)的動(dòng)作時(shí)客戶端應(yīng)該能夠及時(shí)地做出相應(yīng),當(dāng)GTK圖形程序檢測(cè)到鼠標(biāo)點(diǎn)擊時(shí),將觸發(fā)一個(gè)事件,對(duì)該事件進(jìn)行動(dòng)作的定義和函數(shù)的編寫便可完成相應(yīng)的動(dòng)作。因此,針對(duì)這些操作特性,將客戶端模塊進(jìn)行如下劃分:登陸功能模塊:建立與服務(wù)器的連接并登陸,能顯示登陸錯(cuò)誤信息。界面顯示模塊:將在線好友顯示在好友列表中,并顯示其當(dāng)前狀態(tài)。聊天功能模塊:處理各種聊天信息,并判斷消息類型。離線消息模塊:接收和發(fā)送離線消息,對(duì)離線消息進(jìn)行處理。配置信息模塊:提供基本的軟件配置操作。客戶端功能示意圖:登陸到服務(wù)器客戶端界面顯示模塊配置信息模塊聊天功能模塊離線消息模塊 息圖32 客戶端功能示意圖 消息標(biāo)識(shí)定義消息頭,包含發(fā)送者,信息內(nèi)容,接受者,發(fā)送時(shí)間struct message{string sender;string mes;string receiver;string time;}用戶信息,包含姓名,密碼,頭像struct userinfo{string name;string pwd;string picpath;} 好友列表 sequence string frilist消息隊(duì)列 sequence message messagelist用戶用戶信息 dictionary string, userinfo userinfolist用戶好友列表 dictionary string, frilist userfri離線消息 sequence message offlinemessage在線用戶 sequence string liveuser 服務(wù)器接口函數(shù)在slice語(yǔ)言中,定于服務(wù)器接口funcpp,該接口提供以下操作:登入系統(tǒng)int Logins (string name, string pwd)。注冊(cè)用戶int Regists (string name, string pwd, string picpath)。獲取用戶名int Getusername (string name)。獲取用戶頭像string Getfripic(string name)。獲取好友列表frilist Retfrilist(string name)。添加好友int Addfriend(string name,string friname)。刪除好友int Delfriend(string name,string friname)。將用戶信息寫入文件int Writeofflinemesfile()。讀取文件中用戶信息offlinemessage Readofflinemesfile()。發(fā)送消息int Sendmessage(string recverrname,string sendername,string message,string sendtime)。發(fā)送離線消息int Sendofflinemes(string recvername,string sendername,string message,string sendtime)。獲取消息message Getmessage(string recvername,string sendername)。獲取是否在線 int Getstat(string name)。獲取消息數(shù)量 int Getmessagenum()。獲取系統(tǒng)消息數(shù)量 int Getsysnum()。獲取系統(tǒng)消息message Getsysmessage(string recvername)。獲取當(dāng)前時(shí)間char* currenttime(char* curtime, const char* format)。添加日志 void writelog(string s)。用戶在線 int Loginser(string name)。 離線用戶 int Logoutser(string name)。 4 即時(shí)通訊系統(tǒng)軟件詳細(xì)設(shè)計(jì) 服務(wù)器端設(shè)計(jì)思想本系統(tǒng)軟件產(chǎn)品的主要功能是實(shí)現(xiàn)網(wǎng)上聊天,可以讓多個(gè)用戶同時(shí)互相通信,有一個(gè)服務(wù)器,用于檢查客戶登陸請(qǐng)求,轉(zhuǎn)發(fā)客戶所發(fā)出的消息,并負(fù)責(zé)刪除退出的用戶。對(duì)服務(wù)器的某一可用端口進(jìn)行監(jiān)聽(tīng),以獲得客戶端請(qǐng)求,從而對(duì)客戶端請(qǐng)求進(jìn)行處理。因?yàn)槭嵌嗫蛻敉瑫r(shí)請(qǐng)求,所以要采用多線程,為每一個(gè)在線用戶分配一個(gè)線程,實(shí)時(shí)處理每個(gè)客戶端的請(qǐng)求。服務(wù)器端要求實(shí)現(xiàn)公共數(shù)據(jù)處理,處理公共數(shù)據(jù),客戶數(shù)據(jù)資料的存儲(chǔ)與讀取,聊天記錄資料的存取和讀取等。端口監(jiān)聽(tīng)器,監(jiān)聽(tīng)服務(wù)器某一端口,為每一在線客戶建立一個(gè)會(huì)話線程??蛻粽?qǐng)求處理處理客戶的請(qǐng)求,根據(jù)客戶的請(qǐng)求執(zhí)行相應(yīng)的操作。服務(wù)器運(yùn)行后即處于監(jiān)聽(tīng)狀態(tài),當(dāng)監(jiān)聽(tīng)到有連接請(qǐng)求時(shí)服務(wù)器進(jìn)入消息處理流程,因?yàn)榉?wù)器為并發(fā)服務(wù)器,所以可以同時(shí)對(duì)多個(gè)請(qǐng)求做出相應(yīng)。由于服務(wù)器與客戶端是相互獨(dú)立的,啟動(dòng)服務(wù)器后,服務(wù)器等待客戶端與之相連,同時(shí),服務(wù)器本身可以做相應(yīng)的操作:從數(shù)據(jù)庫(kù)讀取用戶信息、從文件中讀取用戶信息、將用戶信息保存到數(shù)據(jù)庫(kù)中(當(dāng)有新用戶注冊(cè)時(shí))、用戶信息保存到文件中(當(dāng)有新用戶注冊(cè)時(shí))。 服務(wù)器工作方式簡(jiǎn)圖如下:圖41 服務(wù)器工作方式簡(jiǎn)圖 客戶端設(shè)計(jì)思想本系統(tǒng)軟件產(chǎn)品的主要功能是實(shí)現(xiàn)網(wǎng)上聊天,可以讓多個(gè)用戶同時(shí)互相通信,有一個(gè)服服務(wù)器,用于檢查客戶登陸請(qǐng)求,轉(zhuǎn)發(fā)客戶所發(fā)出的消息,、從文件中讀取用戶信息、將用戶信息保存到數(shù)據(jù)庫(kù)中(當(dāng)有新用戶注冊(cè)時(shí))、用戶信息保存到文件中(當(dāng)有新用戶注冊(cè)時(shí))。其主要是在后臺(tái)工作。而對(duì)于客戶端,其主要的功能是實(shí)現(xiàn)用戶之間的通信,用穩(wěn)定的圖形化界面表示客戶端,以便直觀的進(jìn)行通信??蛻舳税韵陆缑妫旱顷懡缑?、程序主窗口、聊天界面、注冊(cè)用戶界面、彈出離線消息窗口、添加刪除好友窗口。下圖為客戶端前臺(tái)窗口工作方式簡(jiǎn)圖:圖42 客戶端前臺(tái)窗口工作方式簡(jiǎn)圖客戶端運(yùn)行后首先要用戶登錄到服務(wù)器,如果登陸成功服務(wù)器會(huì)將在線的用戶聯(lián)系人列表發(fā)送給客戶端,此時(shí)客戶端即可顯示有哪些好友在線而哪些是離線的。當(dāng)用戶點(diǎn)擊在線好友時(shí)便會(huì)彈出一個(gè)聊天信息窗體,該窗體用于發(fā)送和接收用戶的聊天信息。當(dāng)用戶點(diǎn)擊離線用戶時(shí)便會(huì)觸發(fā)一個(gè)離線消息事件,該事件通過(guò)服務(wù)器轉(zhuǎn)發(fā)方式發(fā)送給離線用戶,當(dāng)對(duì)方上線時(shí)便可查看該離線消息。服務(wù)器程序啟動(dòng)后,如服務(wù)器流程圖所示,通過(guò)雙線程,同時(shí)啟動(dòng)ICE的Server端和ICE的Client端,服務(wù)器的Server端用來(lái)等待客戶端的Client連接,服務(wù)器的Client端用來(lái)連接客戶端的Server端。啟動(dòng)客戶端,用過(guò)IP和端口號(hào)連接上服務(wù)器的Server端,同時(shí)客戶端啟動(dòng)自身的Server端,此時(shí)服務(wù)器的Client端連接客戶端的Server端,此時(shí),客戶端與服務(wù)器之間建立了連接??蛻舳朔?wù)器連接后,服務(wù)器通過(guò)創(chuàng)建通信器以及適配器,并在通信器中建立Servant以便客戶端調(diào)用。下圖為服務(wù)器和客戶端之間連接方式(ICE的C/S連接)的簡(jiǎn)圖:圖43 ICE下服務(wù)器和客戶端工作方式簡(jiǎn)圖 客戶端后臺(tái)工作方式簡(jiǎn)圖如下:圖44 客戶端后臺(tái)工作方式簡(jiǎn)圖 服務(wù)器端詳細(xì)設(shè)計(jì) 服務(wù)器端主體服務(wù)器主體函數(shù)主要涉及是創(chuàng)建兩個(gè)線程,一個(gè)是Server端線程,一個(gè)Clinet端線程。Server端線程負(fù)責(zé)提供連接,供客戶端的Client端連接;Client端負(fù)責(zé)連接Client端。創(chuàng)建兩個(gè)新線程:IceUtil::ThreadPtr st = new serverthread;IceUtil::ThreadPtr ct = new clientthread。啟動(dòng)線程:IceUtil::ThreadControl tst = ststart()。IceUtil::ThreadControl tct = ctstart()。 服務(wù)器端線程實(shí)現(xiàn)服務(wù)器端有兩個(gè)類serverthread和clientthread,繼承自基類IceUtil::Thread,兩個(gè)類的public的run()方法用來(lái)啟動(dòng)ICE線程。serverthread類的run方法完成工作是:初始化通信器,創(chuàng)建適配器,建立Servant,將Servant加入通信器,激活通信器,然后等待連接,同時(shí)完成工作后關(guān)閉通信器。clientthread類
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1