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