趙茁琳 陳恒如 韓利凱
摘要摘要:根據嵌入式應用特點對嵌入式終端下的網絡聊天系統(tǒng)進行設計,實現了實時通信和文檔共享,具有數據通訊不需要建立服務器、直接在兩臺電腦間進行通信和數據傳輸、支持文件及文件目錄傳輸、安全快捷等特點。
關鍵詞關鍵詞:QT;Linux;嵌入式系統(tǒng);網絡聊天系統(tǒng)
DOIDOI:10.11907/rjdk.1431092
中圖分類號:TP319
文獻標識碼:A文章編號文章編號:16727800(2015)004011402
0引言
QT是諾基亞公司開發(fā)的一個跨平臺應用程序框架,使用QT編寫的軟件可以移置到任意操作系統(tǒng)上編譯與運行,而不需要修改源代碼,軟件會自動依據使用平臺的不同,而呈現出平臺原有的圖形界面風格。QT是一個跨平臺的C++ GUI應用構架,它提供了豐富多彩的窗口部件集,具有易于擴展、面向對象、基于組件編程等特點。并且,目前Linux上最流行的KDE桌面環(huán)境就是建立在QT庫的基礎上。因此,利用Linux進行基于QT的嵌入式聊天系統(tǒng)設計與開發(fā)具有一定的應用價值。
1系統(tǒng)組成架構
系統(tǒng)主要由文字聊天模塊和文件傳輸模塊組成。
1.1文字聊天模塊
系統(tǒng)采用C/S架構,客戶端也同時作為服務器端。系統(tǒng)發(fā)送信息給局域網用戶時,如圖1所示,由單播模塊和廣播模塊來實現,信息接受則由信息接收和信息查看兩個模塊完成。
1.2文件傳輸模塊
系統(tǒng)傳送文件使用TCP協議,端口為2425,如圖2所示,文件傳輸前有個“3次握手”過程,通過“3次握手”從而建立起一個TCP連接,實現文件、文件夾傳輸,最后關閉套接字連接。
2系統(tǒng)設計
2.1系統(tǒng)用戶列表建立
通過使用UDP協議,在系統(tǒng)啟動時向255.255.255.255廣播地址發(fā)送廣播包,廣播包默認端口是2425,廣播包內容包含工作組、用戶名、IP地址、主機名等信息。已經啟動的用戶通過端口2425接收到此廣播包后,就會在自己的用戶列表中添加該用戶的工作組、用戶名、IP地址、主機名等信息,同時向對方IP地址發(fā)送本機用戶的個人信息,從而使雙方建立起用戶列表。當刷新用戶列表時發(fā)送的廣播包和啟動時相似,只是返回的標識信息和啟動時略有不同,可以使用Wireshark抓包工具,監(jiān)控端口2425的數據,就能截獲聊天和刷新時的信息[1]
2.2系統(tǒng)聊天信息傳送
系統(tǒng)聊天信息傳送使用UDP協議,由于UDP協議提供的是無連接服務,所以傳輸速度快,但是由于沒有確認機制,因而提供的是不可靠的服務,需要自己定義返回信息的標志來判斷對方是否接收到信息。
使用IPMSG_SENDMSG命令發(fā)送消息,消息內容添加在附加信息中。在接收消息時,如果對方要求回信確認,則需發(fā)送IPMSG_RECVMSG命令并將對方發(fā)送的數據包的編號放在附加信息中一同發(fā)送至發(fā)送消息方。發(fā)送廣播消息需要使用IPMSG_BOADCASTOPT標志和IPMSG_SENDMSG命令[2]。
自動發(fā)送包(缺席通知)還需要加上IPMSG_AUTORETOPT標志以得到請求-應答保護,如果沒有任何一個包應答,則確認自動發(fā)送包沒有返回。
2.3文件傳輸
文件傳輸使用帶有IPMSG_FILEATTACHOPT位的IPMSG_SENDMSG命令進行傳輸,文件屬性及內容添加在附加信息中。當接收端開始接收文件時,接收端將請求傳輸文件命令IPMSG_GETFILEDATA發(fā)送到發(fā)送端的TCP端口,并將發(fā)送端發(fā)送的包編號:文件序號:偏移量寫到附加信息區(qū)一同發(fā)送,文件發(fā)送端接收到該請求信息后進行校驗,如果正確即可向接收端發(fā)送文件[3]。
當接收端接收到目錄文件時,將發(fā)送附加信息區(qū)為發(fā)送端發(fā)送的包進行編號:文件序號:偏移量(全為十六進制格式),用IPMSG_GETDIRFILES命令請求傳輸目錄文件,而發(fā)送端則將頭信息長度:文件名:文件大?。何募傩裕何募热萏砑拥礁郊有畔^(qū),頭信息長度是從頭信息長度開始到文件內容前的‘:分割符為止的字符個數。當文件屬性為IPMSG_FILE_DIR時,系統(tǒng)能夠自動識別其為目錄,下一個文件的數據在該目錄之后,若文件屬性為IPMSG_FILE_RETPARENT,系統(tǒng)識別其動作為返回上一級目錄,在這種情況下,文件名為‘.,其屬性為當前目錄的值[4]。
2.4用戶離線
當用戶離線時,可以發(fā)送一個離線廣播包到255.255.255.255,收到此廣播包的用戶,根據包中的IP地址
(也可能是包含硬件標識,比如網卡地址或者多種判斷標
志等)刪除對方的用戶列表信息。
3系統(tǒng)測試
將兩臺或者兩臺以上主機組成一個局域網,運行該系統(tǒng),在登陸界面中輸入用戶名和組名,如圖3所示,好友列表會顯示所有在線用戶。雙擊想要聊天的用戶頭像,就會打開聊天窗口,在文字輸入框內輸入文字,點“Send”按鈕或者按Ctrl+Enter鍵就可以給對方發(fā)送消息。
4結語
該系統(tǒng)根據嵌入式應用的特點,對嵌入式終端下的網絡聊天系統(tǒng)進行了設計,實現了實時通信和文檔共享。進行數據通訊時,不需要建立服務器,可直接在兩臺電腦間實現通信和數據傳輸,安全且快捷。
參考文獻參考文獻:
[1]STANLEY B,LIPPMAN BARBARA E. C++ Primer (4rd Editio)[M].李師賢,愛軍,梅曉勇,譯.北京:人民郵電出版,2010.
[2]SCOTT MEYERS.Effective C++[M].潘愛民,侯捷,譯.北京:電子工業(yè)出版社,2010.
[3]王和平.Qt從入門到精通[EB/OL ].http://www.fghyu.com.
[4]網絡協議解析手記[EB/OL].http://www.wlxysj.com.
責任編輯(責任編輯:孫娟)