




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、課程設計說明書(個人)課程名稱:工程課程設計專業(yè)班級:物聯(lián)網(wǎng)工程 12-2學號: 201201051917設 計 人:山東科 技大日學2015 年 1 月 16山 東 科技 大 學課 程 設 計 任 務 書一、課程設計題目:局域網(wǎng)即時通信系統(tǒng)二、設計原始資料:1、課程設計指導書2、GB8567 文檔編寫指南三、設計應解決下列各主要問題:1、抽象出系統(tǒng)的主要參與者與邊界,做出系統(tǒng)用例,確定系統(tǒng)的對象、屬性與方法2、利用 socket 網(wǎng)絡編程技術,實現(xiàn)各個對象之間信息的交互3、實現(xiàn)系統(tǒng)功能:用戶與登錄,用戶管理,服務器管理,好友管理,聊天或者群聊,文件傳送等功能4、解決顯示亂碼問題5、向用戶提供
2、友好的使用界面四、設計說明書應附有下列圖紙:五、小組分工說明:輔助程序員 1輔助程序員 2輔助程序員 1輔助程序員 2組長 文檔管理員六、命題發(fā)出日期:2014.11.28設計完成日期: 2015.1.16指導教師評語成績:指導教師(簽章):年月日目錄課程設計具體任務1個人采用的主要方法與技術2系統(tǒng)總體設計2客戶端服務端設計2系統(tǒng)流程圖設計2服務器主要流程圖設計3客戶端主要流程圖設計3系統(tǒng)主要函數(shù)設計4服務器端主要程序設計4客戶端主要程序設計5個人實現(xiàn)項目的過程與步驟5個人遇到的如何解決與獲得的主要成果6課程設計完成結果分析與個人小結6課程設計具體任務文檔方面除了完成需求分析外,與輔助程序員
3、1 共同完成概要設計說明。程序編寫方面,負責結構設計與前臺程序的開發(fā)(即 C/S 結構中客戶端模塊開發(fā))個人采用的主要方法與技術1 系統(tǒng)總體設計該采用 C/S 模式,通信協(xié)議采用 TCP 協(xié)議。開發(fā)環(huán)境為 Ubuntu,使用 gcc 編譯器。2 客戶端服務端設計2.1 系統(tǒng)流程圖設計基于 Linux 的局域網(wǎng)聊天系統(tǒng)采用 C/S 構架,即客戶端/服務器構架。在 C/S 構架中,多臺相互通訊的計算機都可多為客戶端( cnt) 與服務器( server) 之間進行,并通過服務器程序實現(xiàn)信息數(shù)據(jù)的傳遞。在進行系統(tǒng)設計時,采用 C/S 構架進行網(wǎng)絡聊天,系統(tǒng)需要分為客戶端和服務器兩個部分分別編譯。在服
4、務器和客戶端程序實現(xiàn)系統(tǒng)功能的過程中,需要遵循一定的流程來完成系統(tǒng)功能的整個實現(xiàn)過程。2.1.1 服務器主要流程圖設計系統(tǒng)服務器端是整個基于 Linux 的局域網(wǎng)聊天系統(tǒng)最為重要的部分。系統(tǒng)服務器程序部分主要包括服務主程序、加載已登錄用戶信息程序、修改程序、用戶聊天模式選擇程序、用戶登錄處理程序、修改用戶信息程序以及找回程序等部分。系統(tǒng)服務主程序最主要的功能是作為服務器程序主函數(shù) main( )通訊套接字的創(chuàng)建等操作。服務主程序流程圖如下圖所示:的,實現(xiàn)網(wǎng)絡2.1.2 客戶端主要流程圖設計由于服務器是一對多的工作模式,而客戶端是一對一的工作模式,因此,對于客戶端來說只需完成客戶端與服務器之間的
5、一對一通訊即可。系統(tǒng)客戶端程序部分主要包括客戶端主程序、用戶登錄程序、消息發(fā)送程序、接收消息程序、寫入程序以及查看程序等部分。1) 客戶端主程序流程客戶端主程序作為主函數(shù) main ( ) 的,負責創(chuàng)建 socket網(wǎng)絡通訊套接字、連接服務器、進行用戶登錄處理等操作。具體的客戶端主程序流程是socket( ) 創(chuàng)建網(wǎng)絡通訊套接字然后 connect( ) 連接服務器連接成功后,進行客戶端登陸處理函數(shù)處理。2) 客戶端用戶登錄程序流程在客戶端開始運行時,系統(tǒng)進入開始界面。系統(tǒng)提供了用戶登錄、新賬號、忘記、退出聊天室等四項功能供用戶選擇。2.2 系統(tǒng)主要函數(shù)設計2.2.1 服務器端主要程序設計依據(jù)
6、功能需求分析、總體設計以及系統(tǒng)流程圖設計方案,服務器部分主要程序關系圖如下圖所示:2.2.2 客戶端主要程序設計客戶端部分主要程序關系圖如下圖所示:個人實現(xiàn)項目的過程與步驟1.根據(jù)需求、開發(fā)計劃等文檔,構思模塊結構2.和搭檔了解具體的 C/S 架構原理以及相關的通信協(xié)議,在此過程中總結可能用到的技術。整理出系統(tǒng)概要設計說明根據(jù)總結出的需求技術,查閱相關資料學并調試代碼組其他成員的模塊,再次調試整理系統(tǒng)詳細設計說明書此之前不了解或不熟悉的技術。個人遇到的如何解決與獲得的主要成果編碼期間遇到許多并不熟悉的技術和算法,解決方法主要有兩個,一個是查閱相關新資料了解原理,另一個為從網(wǎng)上查找相關的代碼進行
7、借鑒調試。成果:在編碼調試的過程中增加了項目經(jīng)驗,豐富了現(xiàn)有的知識體系結構。在項目整合的過程中,明白了小組成員之間溝通的重要性。良好的溝通可以加快項目開發(fā)進度,提高效率,減少不必要的工作量。在查閱資料的過程中,接觸了許多之前沒接觸過的知識,累積了許多編程經(jīng)驗。課程設計完成結果分析與個人小結這次設計的基于 Linux 的局域網(wǎng)聊天系統(tǒng)主要采用 Linux 作為開發(fā),以C+ 語言作為編程語言,利用 VI、GCC 、Qt 編輯工具編譯,采用 C/S 架構實現(xiàn)。系統(tǒng)功能主要涉及用戶、用戶登錄、查看當前好友、私聊、查看好友信息、查看聊天、修改安全、更改以及退出系統(tǒng)等。個人完成了局域網(wǎng)聊天系統(tǒng)的概要設計和
8、系統(tǒng)詳細設計,并根據(jù)需求分析、系統(tǒng)總體設計以及系統(tǒng)詳細設計方案對基于 Linux 的局域網(wǎng)聊天系統(tǒng)進行了實現(xiàn)。在的開發(fā)過程中,合理并高效利用現(xiàn)有資源,編寫詳細的可查閱的相關文檔,以及與小組成員積極溝通,這些都是極其重要又必不可少的技能。附錄1.客戶端(輔助程序員 1 共同完成)2.服務端(輔助程序員 1 共同完成)3.概要設計說明(輔助程序員 1 共同完成)4.詳細設計說明局域網(wǎng)即時通信系統(tǒng)軟件概要設計1 引言計算機網(wǎng)絡技術的發(fā)展,各種各樣基于網(wǎng)絡的應用也隨之誕生,比如基于互聯(lián)網(wǎng)的信息發(fā)布、通信、數(shù)據(jù)共享等。局域網(wǎng)的發(fā)展也同樣迅速,很多機構、企業(yè)、學校都是先發(fā)一個的局域網(wǎng)聯(lián)結在一起。1.1 編
9、寫目的隨著網(wǎng)絡信息時代的來臨, ernet 應用越來越廣泛,人們越來越和交流信息。于在網(wǎng)上獲取本理、郵件收系統(tǒng)將主要實現(xiàn)了登錄、好友管理、即時通信消息、群組功能、消息管件收發(fā)等主要功能。用戶通過簡單的以后,便可以登錄系統(tǒng)。隨后進行好友、群以及組的添加,就可以與其他的用戶進行行即時通信。對于消息,服務器以及客戶端都會在各自文件或者數(shù)據(jù)庫中進行相應的,用戶可以隨時進行本地消息以及網(wǎng)絡消息的管理。當然文件的收發(fā)也得到了很好的實現(xiàn),并且也集成了簡單郵件收發(fā)功能。1.2 背景(1)本系統(tǒng)的名稱是:局域網(wǎng)即時通信。(2)本項目的任務提出者是信息學院 2012 級、學院 2012 級雨,開發(fā)者是計算機科學與
10、、,實現(xiàn)該的對象:Ubuntu 用戶。1.3 定義數(shù)據(jù)字典:關于數(shù)據(jù)的信息的集合,也即是對數(shù)據(jù)流圖中包含的元素的定義的集合。Qt:Qt 是 1991 年奇趣科技開發(fā)的一個跨的 C+圖形用戶界面應用程序框架。它提供給應用程序開發(fā)者建立藝術級的圖形用戶界面所需的所有功能。Qt 很容易擴展,并且允許真正地組件編程。1.4 參考資料123.即時通信系統(tǒng)終端的設計與實現(xiàn):.:電了科技大學,2005,2005.3-6.面珆,象程序設計語言 C+.:機械工業(yè),.工程理論與實踐.:高等教育:人民郵電,2007-94 UML 基礎與 Rose 建模:.,5PaulNielsen.SQLServer2000 寶典
11、M.:中國鐵道,2008.,2004.6 成先海.數(shù)據(jù)庫基礎與應用M.:機械工業(yè)7 袁鵬飛. 中文版 SQL Server2000 數(shù)據(jù)庫系統(tǒng)管理.:人民郵電, 2001.2 總體設計2.1 需求規(guī)定用戶能夠向其他客戶端發(fā)送文本消息;客戶端接受到發(fā)給自己的消息后能夠彈出消息框或者以某種形式提醒用戶;用戶能瀏覽他人發(fā)給自己的消息并對消息進行回復;用戶能收發(fā)郵件、文件;用戶能夠管理自己的好友,添加或者刪除。能夠建立群組,實現(xiàn)多人會話;(7)用戶并修改個人信息。2.2 運行環(huán)境環(huán)境:本系統(tǒng)支持的操作系統(tǒng)為 Ubuntu,本系統(tǒng)的支持數(shù)據(jù)庫為的開發(fā)工具為Qt。;本2.3 結構系統(tǒng)包括兩種終端:服務器端
12、、客戶端服務器承擔客戶端獲取機器列表、查詢機器 IP 等服務,也是群聊的服務器客戶端和客戶端之間,客戶端和服務器之間可以點對點進行通信關鍵通訊模式說明:客戶端與客戶端私聊客戶端 1從服務器端獲取信息客戶端 2客戶端服務器2.4 功能需求與程序的關系用戶必須輸入昵稱后,方能登入客戶端,與服務器連接,程序正常運行。2.5 人工處理過程本系統(tǒng)的工作過程中不需要人工處理數(shù)據(jù)。3 接設計3.1 用戶接口本系統(tǒng)采型的Ubuntu 風格作為人機接口,如使用窗口、菜單、框等??诜祷貞鹩脩艄芾硇畔l(fā)送信息3.2 外部接口本系統(tǒng)支持具有 Ubuntu 的操作系統(tǒng),支持并需要使用到關系數(shù)據(jù)庫。3.3接口“用戶驗證
13、”模塊:提供系統(tǒng)用戶登錄時的驗證功能,用戶進行角色切換時必裁用此模塊進行驗證。4 運行設計4.l 運行模塊組合不同的用戶登錄此系統(tǒng)獲得的系統(tǒng)功能是不同的,如超級用戶具有系統(tǒng)的全部功能;一些用戶只具有瀏覽數(shù)據(jù)但不具備更新數(shù)據(jù)的功能。4.2 運行控制超級用戶對系統(tǒng)的其他用戶設置系統(tǒng)功能的部分系統(tǒng)模塊。權限,這樣權限受限的用戶就只能4.3 運行時間“用戶驗證”模塊在完成用戶登錄的驗證后立即退出運行,占用的系統(tǒng)資源。5 系統(tǒng)數(shù)據(jù)結構設計5.1 邏輯結構設計要點邏輯設計是系統(tǒng)中數(shù)據(jù)庫設計的重要步驟之一,其中羅列了文檔需求分析中各種功能實現(xiàn)之間的本質關系,通過E-R 圖描述實例化了的文字抽象概念。以下針對
14、本系統(tǒng)的加以闡述其邏輯設計數(shù)據(jù)表中的基本數(shù)據(jù)結構:5.2 物理結構設計要點數(shù)據(jù)庫結構的物理設計是對一個給定的邏輯數(shù)據(jù)模型選取一個最適合應用環(huán)境的物理結構的過程主要設計表的結構,一般的試題對應于表,實體的屬性對應,實體之間的關系為表的約束,邏輯設計中的實體大部分可以轉化為物理設計中的表,但它們并不是一一對應的。5.3 數(shù)據(jù)結構與程序的關系輸入登入昵稱,若不匹配,返回結果到登錄窗口,提示錯誤,相反登錄成功。6 系統(tǒng)出錯處理設計6.l 出錯信息當輸入信息出錯或者與服務器斷開連接時會彈出框提醒用戶6.2 補救措施本系統(tǒng)中,當用戶沒有輸入非空字段而進行數(shù)據(jù)提交時,系統(tǒng)提示字段數(shù)據(jù)不得為空,請重新輸入再提
15、交。此時輸入界面保留剛剛輸入信息的界面,而不是清空全部輸入界面上的所有數(shù)據(jù);要求用戶重新輸入。本系統(tǒng)提供數(shù)據(jù)備份功能,方便用戶對數(shù)據(jù)的備份。6.3設計詳細編寫各階段的文檔資料,以利于未來版本升級及移植等二次開發(fā)。局域網(wǎng)即時通信系統(tǒng)軟件詳細設計1 引言1.1 編寫目的本文檔為“局域網(wǎng)即時通信系統(tǒng)詳細說明書”,主要是為了實現(xiàn)系統(tǒng)的功能而進行的系統(tǒng)詳細設計說明,詳細系統(tǒng)各個組成模塊的實現(xiàn)流程、功能、接口、編譯、測試要點等內容,便于對系統(tǒng)的編碼進行指導和約束,本文檔供全體組員和測試閱讀。1.2 參考資料1.即時通信系統(tǒng)終端的設計與實現(xiàn):.:電了科技大學,20052.面象程序設計語言 C+.:機械工業(yè),
16、2005.3-63珆,.工程理論與實踐.:高等教育,2007-94UML 基礎與 Rose 建模:,.:人民郵電,2006.144-150, 164-1705PaulNielsen.SQLServer2000 寶典M.:中國鐵道,2004.6 成先海.數(shù)據(jù)庫基礎與應用M.:機械工業(yè),2008.7 袁鵬飛. 中文版 SQL Server2000 數(shù)據(jù)庫系統(tǒng)管理.:人民郵電, 2001.2 系統(tǒng)功能實現(xiàn)首先服務器端是該系統(tǒng)的功能模塊,是首先要考慮的,服務器主要是用戶的行為,響應用戶的請求,為用戶提供服務。他的功能模塊包括系統(tǒng)服務,系統(tǒng)配置,用戶管理,用戶,顯示日志等功能。其中最的功能模塊式系統(tǒng)服務
17、,它上面負責處理客戶不同信息類型的請求,并且在面板上顯示操作的以及用戶的一些行為,方便系統(tǒng)管理員進行管理,而其他面板主要負責一些顯示工作,當然用戶的管理一些功能還未實現(xiàn),只能進行查看。然后是對于客戶端的設計,客戶端包括三大界面,也對應這三大功能,即登陸界面,主界面,聊天界面。其中,登陸界面對應的功能有用戶登陸與,主界面里可以查找添加好友,然后進入聊天面板,在聊天界面主要是用戶之間的信息交流,這些信息的交換都是由服務器支撐的。3 總體設計各個子功能之間的調用;的登錄界面實現(xiàn)到數(shù)據(jù)庫服務器的登陸設計。3.1 系統(tǒng)功能模塊圖:局域網(wǎng)即時通信系統(tǒng)客戶端服務器端注冊聊天文件傳輸加入群組登陸查找好友添加好
18、友系統(tǒng)服務系統(tǒng)配置用戶管理顯示日志3.2 系統(tǒng)順序圖在系統(tǒng)的實現(xiàn)中,和服務的信息交互主要集中在用戶登陸與上面,而且這一塊對多線程操作和對象流的操作要求比較高,所以主要畫著兩個功能的順序圖,如圖 3.3和 3.4。圖3.3順序圖圖3.4登陸順序圖3.3 系統(tǒng)部署圖系統(tǒng)的部署圖主要體現(xiàn)的是系統(tǒng)的構架,本系統(tǒng)采用 C/S 架構。所以部署圖如下:4 程序描述4.1 登陸數(shù)據(jù)庫輸入用戶賬號(id),(pwd),登入數(shù)據(jù)庫,檢索系統(tǒng)權限表。登陸數(shù)據(jù)庫代碼如下:bool IMDatabaseCtrl:createConnection()if(m_db = NULL)m_db = new QSqlDataba
19、se;if(m_db-isOpen()return true;/如果已經(jīng)打開if(QSqlDatabase:contains(cntIMDB)*m_db = QSqlDatabase:database(cntIMDB);else/ 如果沒有,就添加*m_db = QSqlDatabase:addDatabase(Q, cntIMDB);m_db-setDatabaseName(cntIMDB);m_db-setUserName(root);m_db-setPassword(123456);m_db-setHostName(QLatin1String(localhost);if (!m_db-o
20、pen()return false;return true;4.2 程序組、程序項的原理組織各執(zhí)行模塊可執(zhí)行功能模塊的調用執(zhí)行,通過程序項名稱獲取可執(zhí)行目標代碼文件名,應用接口類 Main 開始執(zhí)行,界面如下:部分程序代碼IMLoginWidget:IMLoginWidget(QWidget*parent): QWidget(parent)initIMLoginWidget();linkSignalWithSlot();setWindowTitle(tr(登錄 IM);IMLoginWidget:IMLoginWidget()if (m_loginCtrl != NULL)delete m_l
21、oginCtrl;m_loginCtrl = NULL;if (m_timerID != 0)killTimer(m_timerID);m_timerID = 0;流程圖如下:4.3 用戶子系統(tǒng)總體功能設計:用戶子系統(tǒng)包含用戶信息管理用戶之間數(shù)據(jù)的傳遞下面給出設計方案方法4.4 用戶子系統(tǒng)包含用戶信息管理功能:普通用戶更改自己的功能(超級)管理員添加刪除用戶用戶查找好友超級管理員信息管理輸入:用戶ID、初始密碼處理:將用戶信息按相同的格式導入數(shù)據(jù)庫輸出:提示信息數(shù)據(jù)表:表存放在數(shù)據(jù)庫 DB 中好友分組更改部分程序代碼:void IMMainCtrl:reqhangePwd(const QStr
22、ing & oldPwd, const QString&newPwd)if (NULL = m_tcpSocket)return;TempStrings tmpStr;tmpStr.m_one =m_myID;tmpStr.m_two =oldPwd;tmpStr.m_three= newPwd;m_blockSize = 0;QByteArray block;QDataStreamout(&block, QIODevice:WriteOnly);out.setVer(QDataStream:Qt_4_8);out qu16(0) (CHANGE_PASSWORD) seek(0);out w
23、rite(block);部分數(shù)據(jù)庫代碼:/連接數(shù)據(jù)庫代碼Stringurl=jdbc:/:3306/test;Stringname=root;Stringpwd=1234567890;Connectioncon=null;con=DriverManager.getConnection(url,name,pwd);/更新代碼Sementstmt=con.createSement();stmt.executeUpdate(updatesetpwd=+temp+whereid=+id);/其中 temp 為新刪除用戶界面部分界面代碼:void IMFriendButton:onClickRemove
24、Friend()QMessageBox:StandardButton returnBtn;returnBtn = QMessageBox:question(NULL, tr(刪除好友),QString(tr(你確定要刪除好友(%1)嗎?).arg(m_info.m_userID),QMessageBox:Yes | QMessageBox:No, QMessageBox:No);if(QMessageBox:Yes = returnBtn)m_mainWidget-deleteFriend(m_info.m_userID);用戶查找好友界面如下:部分數(shù)據(jù)代碼:IMDatabaseCtrl:se
25、archUserInUserInformation(constLoginInformation&logInf,UserInformation &userInf)if (!createConnection()return LOGIN_FAIL;/sql 事務QSqlDatabase:database().tranion();QSqlQuery query(*m_db);query.prepare(SEARCH_USER_IN_USERINFORMATION_SQL);query.addBindValue(logInf.m_userID);query.addBindValue(logInf.m_p
26、assword);query.exec();errorSQLOrder(query, login-search);QSqlDatabase:database().commit();if(!query.iive()m_db-close();return LOGIN_FAIL;if(query.size() close();return LOGIN_FAIL;if(query.next()userInf.m_userID =query.value(0).toString();userInf.m_heortrait = query.value(1).to();userInf.m_nickname =
27、 query.value(2).toString();userInf.m_sex = query.value(4).toString();userInf.m_birthday = query.value(5).toDate();userInf.m_name = query.value(8).toString();userInf.m_phone = query.value(9).toString();userInf.m_address = query.value(10).toString();userInf.m_regDateTime = query.value(11).toDateTime()
28、;userInf.m_sus = logInf.m_sus;qDebug() searchUserInUserInformation: close();return LOGIN_FAIL;流程圖如下:好友分組界面如下:好友分組部分代碼:IMDatabaseCtrl:moveFriendToGroup(constQString & myID, const QString &friendID, const QString & title, const QString & newTitle)if (!createConnection()return MOVE_FRIEND_BOX_FAIL;/sql
29、 事務QSqlDatabase:database().tranion();QSqlQuery query(*m_db);query.prepare(MOVE_FRIEND_IN_USERFREINS);query.addBindValue(newTitle);query.addBindValue(myID);query.addBindValue(friendID);/query.addBindValue(title);query.exec();errorSQLOrder(query, move-friend-to-group);if(!query.iive()qDebug() QUERY_FA
30、IL: close();return MOVE_FRIEND_BOX_FAIL;if(0 = query.numRowsAffected()return MOVE_FRIEND_BOX_FAIL;QSqlDatabase:database().commit();/m_db-close();return MOVE_FRIEND_BOX_SUCS;部分代碼如下:IMInputTextEdit:IMInputTextEdit(QWidget *parent) :QTextEdit(parent)IMInputTextEdit:IMInputTextEdit()void IMInputTextEdit
31、:keyPressEvent(QKeyEvent *event)/如果按下 Ctrl+Enter,就發(fā)送信息,否則就按默認的方式來處理bool isSend = (Qt:Key_Return=event-key() |Qt:Key_Enter=event-key()& (event-modifiers() & Qt:ControlModifier);if(isSend)emidMessage();elseQTextEdit:keyPressEvent(event);接收用戶給所有人發(fā)送的信息界面如下部分代碼如下:b=true;BufferedReaderbr=null;trybr=newBuf
32、feredReader(newInputStreamReader(s.getInputStream();catch(IOExceptione)e.prStackTrace();whi)if(CntFace.getSocket().isClosed()b=false;break;Stringstr=null;trystr=br.readLine();catch(IOExceptione)e.prStackTrace();if(str.startsWith(all:)str=str.substring(4);StringTokenizerst=newStringTokenizer(str,/);C
33、ntFace.getUsers().removeAllItems();CntFace.getUsers().addItem(所有人);while(ssMoreTokens()Stringuser=st.nextToken();if(!user.equals(CntFace.getName()CntFace.getUsers().addItem(user);elseCntFace.getReceiveText().setText(CntFace.getReceiveText().getText()+str+n);Pop=newPo();if(!CntFace.getReceiveText().g
34、etScrollableTracksViewportHeight()p.setLocation(0,CntFace.getReceiveText().getHeight();CntFace.getSp().getViewport().setViewition(p);以上這部分代碼應該是放在一個線程中的,使得客戶端能夠隨時接收并顯示服務器傳遞來的數(shù)據(jù)以下界面是用戶給其他某個特定的用戶發(fā)送信息:其部分實現(xiàn)代碼為:void IMMessageManageWidget:setNetworkMessageWidget(constQVector & mesVec)m_networkWidget-setMe
35、ssageShow(mesVec);接受用戶所發(fā)送的消息:客戶端會一直等待從服務器接收消息,至于接收消息的類型由服務器控制而不由客戶端來控制,所以接受某個用戶所給該用戶發(fā)送的消息模塊將會在服務器系統(tǒng)中說明流程圖如下:4.5 服務器子系統(tǒng)總體功能設計:接收客戶端客戶所發(fā)送的信息,并將其轉發(fā)給合適的目的用戶下面給出設計方案和設計方法在這里有一個輔助的功能就是,當用戶登陸是,用戶會將自己的 Socket 和 ID 號發(fā)送給服務器,服務器會將該用戶的信息在服務器中,同時服務器將該用戶的 id 分發(fā)出去,使得所有用戶直到此用戶上線具體代碼如下:bool IMLoginWidget:readAutoLog
36、inFile(const QString &filename)QString tm;QString tmpPwd;bool isAuto = false;if (!IMCntFileCtrl:readAutoLogin(filename, tm, tmpPwd, isAuto)m_isAutoLogin = false;qDebug() setText(tm);m_leUswd-setText(tmpPwd);m_cbAutoLogin-setChecked(isAuto);m_isAutoLogin = isAuto;m_cbKeepPwd-setChecked(true);return t
37、rue;void IMLoginWidget:setServer(const QString& ip,constport)QHostAddress serverAddress;servort;if (m_hostAddress-text().isEmpty()serverAddress = ip;elseserverAddress = m_hostAddress-text();if (m_hostPort-text().isEmpty()servort = port;elseservort = m_hostPort-text().to();IMTcpSocket:s_hostAddress =
38、 serverAddress;IMTcpSocket:s_hostPort = servort;/qDebug() serverAddress: serverAddress/ port: sendMessage(m_save);/ 如果群主,就發(fā)送群成員退出群信息,如果不,就先QMap:iterator iter;iter = m_userMap.find(m_save.m_peerID);if(m_userMnd() = iter)TalkMessage mes;mes.m_type = LEAVE_FLOCK_SUCS;mes.m_senderID = save.m_myID;mes.m_
39、receiverID = save.m_peerID;/mes.m_text = save.m_groupNameF;/離線消息/m_database.messageRequest(save.message);else/TalkMessage mes;/mes.m_type = LEAVE_FLOCK_SUCS;/mes.m_senderID = save.m_myID;/mes.m_receiverID = save.m_myID;iter.value()-sendMessage(m_save);/如果群成員,就發(fā)送群成員退出群信息,如果不,就先/QMap:iteratoriter;iter
40、 = m_userMap.find(m_save.m_myID);if(m_userMnd() = iter)TalkMessage mes;mes.m_type = LEAVE_FLOCK_SUCS;mes.m_senderID = save.m_myID;mes.m_receiverID = save.m_peerID;/mes.m_text = save.m_groupNameF;/離線消息/m_database.messageRequest(save.message);else/TalkMessage mes;/mes.m_type = LEAVE_FLOCK_SUCS;/mes.m_
41、senderID = save.m_myID;/mes.m_receiverID = save.m_myID;iter.value()-sendMessage(m_save);/lFlockMemberHaveLeavedMember(m_save.m_flockID);lFlockMemberHaveLeavedMember(m_save.m_flockID);/save.m_cntSocket-sendMessage(m_save);break;查看所有用戶的狀態(tài)的設計原理:如果客戶端上線,則用戶上線,直到用戶下線時,用戶離線,其根據(jù)的也是用戶端發(fā)送的消息,只不過是格式的不同而已,具體代碼如下:if (id.contains(_ADDRESS_FORMAT)m_us
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年高性能特種合金材料項目合作計劃書
- 同城工地出售合同范本
- 合作建材協(xié)議合同范例
- 共同投資協(xié)議合同范本
- 賣地買房合同范本
- 卷宗管理服務合同范例
- 合同范本庫編制說明
- 資質借用合同范本
- 農(nóng)田煙桿出售合同范本
- 幼兒園塑膠地板購銷施工合同范本
- 化驗班組安全培訓
- 英語-廣東省大灣區(qū)2025屆高三第一次模擬試卷和答案
- 丹佛斯變頻器培訓經(jīng)典課件
- 2024年06月日照銀行社會招聘筆試歷年參考題庫附帶答案詳解
- 烤房租賃合同范例
- 建筑地暖系統(tǒng)工程安裝考核試卷
- 專題四 指數(shù)函數(shù)與對數(shù)函數(shù)【中職專用】2025春季對口高考數(shù)學專題復習(河南適用)(解析版)
- 江蘇卷2024年高考語文第一次模擬考試一(原卷版+解析版)
- 2024解析:第十六章電壓和電阻-講核心(解析版)
- 單層鋼結構工業(yè)廠房施施工組織設計
- 華為經(jīng)營管理-華為激勵機制(6版)
評論
0/150
提交評論