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

        ?

        基于Qt的安全即時通訊軟件服務器端設計

        2017-02-13 16:04:08竇立君韓坷罕閆志剛
        網絡空間安全 2016年11期
        關鍵詞:服務器端

        竇立君 韓坷罕 閆志剛

        【 摘 要 】 論文詳細介紹了如何基于Qt開發(fā)具有用戶注冊、用戶資料維護、用戶列表下發(fā)、登錄校驗、消息轉發(fā)、文件傳輸等功能的安全即時通訊軟件服務器端。

        【 關鍵詞 】 qt;消息轉發(fā);服務器端;文件傳輸

        Design of Network Chat Software Server Based on Qt

        Dou Li-jun 1 Han Ke-han 1 Yan Zhi-gang 2

        (1.Nanjing Forestry University JiangsuNanjing 210037;2.Dongfang Electronics Co.,Ltd. ShandongYantai 264000)

        【 Abstract 】 The paper describes in detail how to develop a secure instant messaging server, which is based on Qt, which is user registration, user data maintenance, user list, login verification, message forwarding, file transfer and so on.

        【 Keywords 】 qt; message forwarding; server; file transfer

        1 引言

        隨著聊天軟件應用在人們生活中各方面,人們也變得越來越重要重視聊天軟件的存在,因為聊天軟件在很大程度上為人民的生活辦公提供了便利,人們可以通過互聯(lián)網進行信息的有效收集和整理,以及與不同地方的人交流。

        目前的聊天軟件基本都是由服務器端和客戶端兩部分組成,客戶端有Web版的和本地版的,無論哪種版本,它們都需要通過與服務器端的通信來實現最終功能。

        本文通過對服務器端的功能分析、安全性、工作流程、關鍵代碼設計等方面,來闡述安全聊天軟件服務器端的設計過程。

        2 系統(tǒng)分析

        服務器聊天系統(tǒng)很重要的組成部分,所以對于服務器的功能需求分析是非常重要的,正確完整的分析,是成功構建一個聊天系統(tǒng)服務器的第一步。

        能夠成功地分析好服務器的需求,對于后面設計服務器的模塊工作是不可或缺的,所以在這里,首先進行的就是關于這個即時聊天系統(tǒng)服務器的需求分析。

        2.1 登錄校驗

        輸入:來自客戶端的用戶名和密碼;

        處理流程:與數據庫中的用戶名和密碼匹配,并反饋結果給客戶端;

        輸出:匹配成功或失敗。

        2.2 用戶注冊

        輸入:來自客戶端的用戶名和密碼;

        處理流程:在數據庫中寫入新用戶名和密碼,并反饋結果給客戶端;

        輸出:新建成功或失敗。

        2.3 消息轉發(fā)

        輸入:客戶端所發(fā)送的聊天信息;

        處理流程:根據所要發(fā)送到的用戶名進行轉發(fā),用戶不在線時另作處理;

        輸出:轉發(fā)信息給發(fā)往方。

        2.4 文件傳輸

        輸入:客戶端所發(fā)送的文件數據;

        處理流程:直接轉發(fā)到發(fā)往方;

        輸出:轉發(fā)數據給發(fā)往方。

        2.5 用戶資料維護

        輸入:客戶端所發(fā)送的更新請求;

        處理流程:按請求更新數據庫中對應的數據;

        輸出:更新成功或失敗。

        2.6 用戶列表下發(fā)

        輸入:用戶登錄成功;

        處理流程:當某用戶登錄成功后,下發(fā)在線用戶列表給該用戶;

        輸出:在線用戶列表。

        根據服務器端的需求分析,進行功能模塊的劃分:封包解析模塊、封包生成模塊、封包分發(fā)模塊、數據存儲模塊、用戶注冊模塊、用戶登錄模塊、文本信息轉發(fā)模塊、離線文本信息轉發(fā)模塊、文件傳輸模塊、用戶列表下發(fā)模塊、用戶資料模塊、超時檢測模塊,這些模塊既有獨立完成相關功能,也有相互協(xié)調,合作完成最終任務。

        3 安全性分析

        現在大家使用的安全即時通訊軟件基本都是使用數據報協(xié)議UDP。UDP和傳輸控制協(xié)議TCP都是傳輸層協(xié)議,但UDP是一種面向無連接的傳輸協(xié)議,這種協(xié)議在進行雙方數據傳輸時,發(fā)送方只要知道接收方的地址和端口號就可以向接收方發(fā)送數據。這種協(xié)議帶來高速便捷的數據傳輸,但不提供數據傳送的安全保障機制,因此數據包傳輸不可靠,丟包率高。具體實現時要設計一種機制來對用戶傳遞的數據提供一種丟失檢測。

        對于文件傳輸,如果是在同一局域網內,或者雙方都具有公網IP,只要直接建立TCP連接就可以傳文件。但是,在互聯(lián)網上,實際的情況比這更要復雜,客戶端有可能處于同一NAT或不同的NAT之內,客戶端之間要直接通信比較困難。在此處的文件傳輸案例中,就可以使用“TCP”打洞技術,或者通過服務器中轉,來穿透NAT進行數據收發(fā)。

        4 工作流程

        有了完整的模塊劃分,現在需要的就是構建服務器的工作流程,讓服務器運轉起來。本聊天服務器的核心工作流程,簡單地說,就是不斷把消息包分類攤派到各個不同處理模塊上的過程。

        服務器在指定的端口上偵聽數據包,當接收到數據包后,首先調用封包解析模塊對數據包進行解析,獲取命令類型后,再根據命令類型的不同來調用不同的模塊。不同的模塊處理完成后,再調用封包生成模塊來打包結果,把處理結果發(fā)送給客戶端。

        當接收到的是登錄命令時,將調用登錄管理模塊來判斷是否可以登入系統(tǒng),不管是否能登入,都把結果打包返回給客戶端。如果能成功登入,則繼續(xù)調用用戶列表下發(fā)模塊,把在線用戶列表打包發(fā)送給客戶端。

        當接收到的是注冊命令時,將調用用戶注冊模塊來往系統(tǒng)中添加新用戶,注冊模塊會調用數據存儲模塊進行處理,然后把結果打包返回給客戶端。

        當接收到的是資料更新命令時,將調用資料管理模塊,資料管理模塊又會調用數據存儲模塊進行處理,處理完成后,把結果反饋給客戶端。

        當接收到的是文本消息時,將調用文本消息轉發(fā)模塊進行處理,該模塊從解析得到的結果中,獲取所要發(fā)送往的客戶端,然后進行轉發(fā)。如果檢測到所要發(fā)往的客戶端不在線,則轉入離線消息模塊處理。

        用戶登錄后,客戶端會定時發(fā)送心跳包到服務器,服務器自動維護此在線狀態(tài)列表,并定時執(zhí)行超時檢測模塊,把超時的用戶從在線列表中刪除。

        5 關鍵代碼設計

        聊天服務器的工作流程比較簡單,即:收到消息→處理消息→轉發(fā)處理后的消息。聊天服務器啟動時在特定的端口監(jiān)聽,當有數據到達時,自動判斷消息類型,進行不同的處理,然后根據處理結果,把它發(fā)送給客戶端。實現中,消息的接收和發(fā)送,以及判斷消息類型,都比較簡單,工作量較大的則是處理消息的部分。因為有很多不同的命令,對應的,也有不同的處理過程,所以設計中,把這些處理過程分離成單獨的處理邏輯,在類中表現為不同的函數。本模塊的設計并不包含圖形用戶界面相關的部分,當最終的服務器軟件需要搭配圖形界面時,只需要在聊天服務器模塊中定義相關的信號,并在合適的時候發(fā)出信號。圖形界面程序就可以通過聊天服務器模塊的信號和它的槽進行連接,來實現顯示更新等功能。

        5.1 聊天服務器端的類定義

        為了利用Qt的信號和槽功能,聊天服務器類直接從QObject繼承,具體代碼如下 :

        class ChatServer : public QObject

        { Q_OBJECT

        public:

        explicit ChatServer(QObject *parent = 0);

        void start(quint16 port=4500); //啟動服務

        private:

        void registerUser(const QString& id, const QString& password, const QHostAddress& addr, quint16 port);//注冊用戶

        bool login(const QString& id, const QString& password, const QHostAddress& addr, quint16 port);//用戶登錄

        void relayMessage(const QString& to, const QString& message, const QFont& font, const QColor& color, const QHostAddress& addr, quint16 port);//轉發(fā)聊天消息

        void sendFriendsList(const QHostAddress& addr, quint16 port); //發(fā)送用戶列表

        void feedback(const QHostAddress& addr, quint16 port); //反饋

        void logout(const QHostAddress& addr, quint16 port); //注銷

        void keepAlive(const QHostAddress& addr, quint16 port); //激活

        QUdpSocket *m_udpSender; //發(fā)送數據的UDP對象

        QUdpSocket *m_udpReceiver; //監(jiān)聽數據的UDP對象

        QHash m_nameHash; //名字表

        QHash m_hostHash; //主機表

        QHash m_aliveTimeHash; //激活狀態(tài)表

        Storage m_storage; //數據存儲對象

        enum {onlineTimeout = 30}; //在線超時時間

        private slots:

        void processPendingDatagrams(); //網絡數據處理

        void checkTimeout(); //檢查超時狀態(tài)

        };

        在ChatServer類的實現中,需要注意名稱表、主機表以及激活狀態(tài)表的維護,它們是維持服務器工作狀態(tài)的核心。為了實現快速查詢,這幾張表都采用Qt中的哈希表QHash進行存儲。如:名稱表是用戶名到(主機,端口號)的映射,即通過用戶名可以查詢到對應的主機地址和端口號,在轉發(fā)消息時就要使用到名稱表。

        5.2 超時檢測

        超時檢測功能由定時器自動執(zhí)行,以實現隔固定時間更新一次在線狀態(tài)的功能。當到達時間點時,程序開始遍歷激活狀態(tài)表中的所有用戶,檢查其最后一次的心跳包時間與當前系統(tǒng)時間的差值是否超過指定的預期,如果沒有,則表示用戶仍然正常在線,如果超時,則作自動注銷處理。具體代碼如下:

        void ChatServer::checkTimeout()

        { QList keys = m_aliveTimeHash.keys(); //查詢所有用戶名

        QDateTime now = QDateTime::currentDateTime(); //獲取當前系統(tǒng)時間

        for (int i = 0; i < keys.length(); ++i) //遍歷所有用戶

        { if (m_aliveTimeHash.value(keys.at(i)).secsTo(now) > onlineTimeout) //檢查用戶是否超時

        { qDebug() << trUtf8("%1 timeout").arg(keys.at(i));

        QStringList list = keys.at(i).split(" ");

        QHostAddress addr;

        addr.setAddress(list.at(0).toInt());

        quint16 port = list.at(1).toInt();

        logout(addr, port); //用戶超時的時候作注銷處理

        }}}

        6 結束語

        關鍵代碼介紹之后,其它功能的代碼的接口規(guī)范及實現也就相對容易了,這里就不再作介紹。服務器端軟件設計完成之后,配合客戶端軟件完成了消息的傳遞及轉發(fā),客戶端文件的傳輸及服務器端日志的記錄等功能。后期,還需要繼續(xù)在數據的傳輸安全性和可靠性方面做好優(yōu)化,做好客戶端其它的擴展功能的支持,提高客戶端用戶對服務器端響應和支持的體驗。

        參考文獻

        [1] 丁林松,華麗琴.Qt4圖形設計與嵌入式開發(fā)[M].北京:人民郵電出版社.2009.

        [2] (英)薩默菲爾德.Qt高級編程[M].北京:電子工業(yè)出版社.2011.

        [3] 吳迪.零基礎學Qt4編程[M].北京:北京航空航天大學出版社.2010.

        [4] 代勇.Visual C++網絡通信編程技術詳解[M].北京:機械工業(yè)出版社.2011.

        [5] 行天. 聊天的危險看即時通訊常見安全問題[J]. 計算機與網絡,2007,09:34-35.

        [6] 李延松,余隋懷,吳博. 基于Socket的安全即時通訊軟件的設計[J]. 科學技術與工程,2007,12:2974-2977.

        基金項目:

        基于MDA技術的Web應用平臺研究(科技創(chuàng)新)(163070054); 軟件服務外包專業(yè)實訓體系改革(高教研究)(163070644)。

        作者簡介:

        竇立君(1977-),男,江蘇泰州人,碩士;主要研究方向和關注領域:計算機應用。

        猜你喜歡
        服務器端
        Linux環(huán)境下基于Socket的數據傳輸軟件設計
        數碼世界(2020年11期)2020-11-23 12:02:12
        淺析異步通信層的架構在ASP.NET 程序中的應用
        成功(2018年10期)2018-03-26 02:56:14
        智能冰箱關鍵技術研究
        考試系統(tǒng)服務器端的設計與實現
        科技資訊(2018年28期)2018-03-07 02:40:22
        Web應用中的實時消息交互技術
        基于Android平臺的校物多功能交易系統(tǒng)
        在Windows中安裝OpenVPN
        一種基于Java的IM即時通訊軟件的設計與實現
        科技資訊(2015年19期)2015-10-09 19:25:38
        基于C/S架構的嵌入式監(jiān)控組態(tài)外設擴展機制研究與應用
        軟件導刊(2015年6期)2015-06-24 13:09:56
        基于SSH框架、Android平臺的校園購物系統(tǒng)
        美腿丝袜一区在线观看| 中国老太老肥熟女视频| 亚洲国产一区久久yourpan| 一区二区三区中文字幕在线观看| av黄页网国产精品大全| 少妇人妻出水中文字幕乱码| 国产成人av区一区二区三| 一区二区三区国产高清视频| 国产午夜精品无码| 亚洲欧美一区二区三区在线| 国产精品久久久久久麻豆一区 | 调教在线播放黄| 丝袜美腿爆炒国产在线观看| 男人天堂插插综合搜索| 中文字幕亚洲欧美在线不卡| 无码av无码天堂资源网| 亚洲国产成人精品福利在线观看| 国产精品国产三级国产三不| 中文字幕人妻av四季| 久久精品国产熟女亚洲| 老师露出两个奶球让我吃奶头| 一二三四在线视频观看社区| 国产成人精品三级麻豆| 精品久久久亚洲中文字幕| 亚洲精品在线97中文字幕| 免费的日本一区二区三区视频| 免费成人在线电影| 久久这里只精品国产免费10| 国产免费看网站v片不遮挡| 亚洲高清自偷揄拍自拍| 久久夜色国产精品噜噜亚洲av| 久久国产成人精品国产成人亚洲| 人人妻人人澡人人爽久久av| 欧美日韩亚洲国产千人斩| 亚洲又黄又大又爽毛片| 亚洲中文字幕精品久久a| 国产精品久免费的黄网站 | 人妻 偷拍 无码 中文字幕| 一本色道久久综合狠狠躁| 日本骚色老妇视频网站| av网站免费在线浏览|