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

正文內(nèi)容

linux下基于c語(yǔ)言開(kāi)發(fā)的即時(shí)通信軟件畢業(yè)設(shè)計(jì)(編輯修改稿)

2025-07-20 19:38 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 的run方法完成的工作是:初始化通信器,創(chuàng)建適配器,建立server端的代理,查找相應(yīng)的Servant代理,通過(guò)代理調(diào)用相應(yīng)接口。在clientthread類的run方法中,通過(guò)代理調(diào)用相應(yīng)的接口函數(shù),加上選擇機(jī)制,可以完成服務(wù)器端的四個(gè)功能:從數(shù)據(jù)庫(kù)讀取用戶信息、從文件中讀取用戶信息、將用戶信息保存到數(shù)據(jù)庫(kù)中(當(dāng)有新用戶注冊(cè)時(shí))、用戶信息保存到文件中(當(dāng)有新用戶注冊(cè)時(shí))。在服務(wù)器和客戶端連接時(shí),二者相連的端口號(hào)直接寫入了配置文件,這樣就無(wú)需用硬寫入的方式在程序中就寫入連接的IP和端口號(hào),從而方便了我們以后可以修改,而不必改變整個(gè)程序,ICE的配置文件的方式提供了這樣的方便。Ice 屬性機(jī)制提供了一種簡(jiǎn)單的配置 Ice 的途徑,你可以在配置文件中、或在命令行上設(shè)置屬性。這也適用于你自己的應(yīng)用:你可以輕松地使用Properties接口,訪問(wèn)你為自己的需要而創(chuàng)建的、應(yīng)用專用的屬性。用于訪問(wèn)屬性值的 API 小而簡(jiǎn)單,所以要在運(yùn)行時(shí)用它獲取屬性值很容易;這個(gè) API 還很靈活,如果有需要,它能讓你使用多個(gè)不同的屬性集和配置文件。啟動(dòng)服務(wù)器后,效果如下圖:圖45 啟動(dòng)服務(wù)器截圖 服務(wù)器端提供以下函數(shù)的實(shí)現(xiàn):登入系統(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)。 客戶端圖形界面詳細(xì)設(shè)計(jì)即時(shí)通信軟件的客戶端是使用圖形用戶界面來(lái)實(shí)現(xiàn)的,程序運(yùn)行后激活主窗體,在主窗體上點(diǎn)擊設(shè)置為敏感狀態(tài)的按鈕就會(huì)產(chǎn)生相應(yīng)的事件,該事件將會(huì)觸發(fā)一個(gè)消息驅(qū)動(dòng)所指定的函數(shù)來(lái)處理這個(gè)操作。本軟件使用QT圖形界面來(lái)實(shí)現(xiàn),其具有以下優(yōu)點(diǎn):面向?qū)ο螅篞t 的良好封裝機(jī)制使得 Qt 的模塊化程度非常高,可重用性較好,對(duì)于用戶開(kāi)發(fā)來(lái)說(shuō)是非常 方便的。Qt 提供了一種稱為signals/slots 的安全類型來(lái)替代 callback,這使得各個(gè)元件之間的協(xié)同工作變得十分簡(jiǎn)單;豐富的API:Qt包括多達(dá) 250個(gè)以上的 C++ 類,還提供基于模板的 collections, serialization, file, I/O device, directory management, date/time 類。登陸界面的設(shè)計(jì)是整個(gè)客戶端的切入點(diǎn),客戶端的整個(gè)設(shè)計(jì)都是在圖形界面下完成的。圖形用戶界面或圖形用戶接口(Graphical User Interface,GUI)是指采用圖形方式顯示的計(jì)算機(jī)操作環(huán)境用戶接口。與早期計(jì)算機(jī)使用的命令行界面相比,圖形界面對(duì)于用戶來(lái)說(shuō)更為簡(jiǎn)便易用。GUI的廣泛應(yīng)用是當(dāng)今計(jì)算機(jī)發(fā)展的重大成就之一,它極大地方便了非專業(yè)用戶的使用人們從此不再需要死記硬背大量的命令,取而代之的是可用通過(guò)窗口、菜單、按鍵等方式來(lái)方便地進(jìn)行操作。而嵌入式GUI具有下面幾個(gè)方面的基本要求:輕型、占用資源少、高性能、高可靠性、便于移植、可配置等特點(diǎn)。圖形界面穩(wěn)定實(shí)用是前提,在穩(wěn)定的前提下要力求做好美觀,簡(jiǎn)潔,客戶端通過(guò)創(chuàng)建圖形界面,并通過(guò)代理調(diào)用服務(wù)器中的接口,再運(yùn)用QT的機(jī)制,通過(guò)點(diǎn)擊按鈕等方式獲取相應(yīng)響應(yīng),從而實(shí)現(xiàn)相應(yīng)操作。 連接窗體連接窗體:用以實(shí)現(xiàn)客戶端和服務(wù)器的連接。在連接窗體中,有兩個(gè)Button(按鈕(下同))和兩個(gè)LineEdit。IP對(duì)應(yīng)的LineEdit響應(yīng)SaveIp函數(shù),用以保存Ip地址。其實(shí)現(xiàn)如下:void MainWindow::SaveIp(){QString qip。(uitext1text())。serip= ()。}Port對(duì)應(yīng)的LineEdit響應(yīng)SavePort函數(shù),用以保存Port號(hào)。其實(shí)現(xiàn)如下:void MainWindow::SavePort(){QString qip。(uitext2text())。serport= ()。}‘OK’按鈕響應(yīng)響應(yīng)Loginuser函數(shù),目的是登陸服務(wù)器。其實(shí)現(xiàn)如下:funcppPrx MainWindow::getfuncpp(){Ice::CommunicatorPtr ic。try{ic = Ice::initialize()。Ice::PropertiesPtr props = icgetProperties()。string configfile = CONFIG_FILE。propsload(configfile);string str=SimplePrinter:。if (serip==default) str=str+serip+ p +serport。 else str=str+ tcp h +serip+ p +serport。coutstrendl。Ice::ObjectPrx base = icstringToProxy(str)。funcppPrx cbrx = funcppPrx::checked Cast(base)。return cbrx。}catch (const Ice::Exception amp。 ex){car ex endl。}catch (const char * mug){car mug endl。}if (ic)icdestroy()。}同時(shí),若連接服務(wù)器成功,還應(yīng)彈出新窗口。其實(shí)現(xiàn)如下:void MainWindow::Loginuser(){ MainWindow::close()。 if (()==0) { QMessageBox::about(NULL, IP is NULL, IP is set default)。serip=default。} if (()==0) {QMessageBox::about(NULL, Port is NULL, Port is set 20000)。serport=20000。} =serip。 =serport。 icefun=getfuncpp()。 =icefun。 ()。 while(==0) { =icefun。 ()。 } usernm=。 if (==1) { =。 =usernm。 ()。 QString s=QString(())。 (s)。 ()。 Logoutser()。 }}‘Cancel’按鈕響應(yīng)系統(tǒng)函數(shù),關(guān)閉窗體。連接窗體如下圖:圖46 連接窗體 登陸窗體登陸窗體:實(shí)現(xiàn)用戶登陸。在登陸窗體中,含有2個(gè)LineEdit和3個(gè)Button。UserName對(duì)應(yīng)的LineEdit響應(yīng)SaveName函數(shù),保存用戶姓名。其實(shí)現(xiàn)如下:void Login::SaveName(){QString qname。(uitext3text())。usrname= ()。}Password對(duì)應(yīng)的LineEdit響應(yīng)SavePassword函數(shù),保存密碼。其實(shí)現(xiàn)如下:void Login::SavePassword(){QString qpassword。(uitext4text())。usrpwd= ()。}‘OK’按鈕響應(yīng)Logusr函數(shù),用戶登陸成功。其實(shí)現(xiàn)如下:int Login::Logusr(){close()。if (()==0 || ()==0){QMessageBox::about(NULL, Please try again, Username and Password can not NULL)。flag=0。return 0。}flag=1。int ret=loginicefunLogins(usrname,usrpwd)。if (ret==2) {QMessageBox::about(NULL,Login Error!,Can not find user)。return 1。}if (ret==0){QMessageBox::about(NULL,Please try again,Username or Password Error)。flag=0。return 0。}return 1。}‘Regist’按鈕響應(yīng)Register函數(shù),彈出新得窗體。其實(shí)現(xiàn)如下:void Login::Register(){Regist reg。=loginicefun。()。}‘Cancel’按鈕調(diào)用系統(tǒng)函數(shù),關(guān)閉窗體。圖47 登陸窗體 注冊(cè)窗體注冊(cè)窗體:用于用戶的注冊(cè)。在注冊(cè)窗體中含有2個(gè)LineEdit和個(gè)Button。UserName對(duì)應(yīng) 的LineEdit響應(yīng)saveregistername函數(shù),保存需要注冊(cè)的用戶名稱。其實(shí)現(xiàn)如下:void Regist::saveregistername(){QString qname。(uitext7text())。registername= ()。}Password對(duì)應(yīng)的LineEdit響應(yīng)saveregisterpwd函數(shù),用來(lái)保存注冊(cè)用戶的密碼,其實(shí)現(xiàn)如下:void Regist::saveregisterpwd(){QString qname。(uitext8text())。registerpwd= ()。}‘Select Picture’按鈕響應(yīng)selectpic函數(shù),用來(lái)保存一張用戶頭像,其實(shí)現(xiàn)如下所示:void Regist::selectpic(){filepath = QFileDialog::getOpenFileName(this, tr(Open Image), ., tr(Image Files(*.jpg *.png)))。registerpic=()。uilabelsetPixmap(QPixmap(filepath))。uilabelshow()。}‘Regist’按鈕響應(yīng)saveall函數(shù),用來(lái)保存當(dāng)前注冊(cè)的用戶信息,其實(shí)現(xiàn)如下:void Regist::saveall(){if (()==0){QMessageBox::about(NULL,Regist Error!,Name is NULL)。return 。}if (()==0){QMessageBox::about(NULL,Regist Error!,Password is NULL)。return 。}if (()==0){QMessageBox::about(NULL,Regist Error!,Picture is NULL)。return 。} ‘Cancel’響應(yīng)系統(tǒng)函數(shù),關(guān)閉窗體。注冊(cè)窗體如下:圖48 注冊(cè)窗體 用戶窗體用戶窗體:用于展示好友列表,并選定好友和好友聊天或者刪除好友。用戶窗體提供兩個(gè)Button和一個(gè)Widget。該窗體提供一個(gè)初始化函數(shù)init,用于獲取好友列表,其實(shí)現(xiàn)如下:void chatmwindow::init(){chatwindicefunLoginser(username)。oldfriname=chatwindicefunRetf
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1