<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 消費電子 > 設計應用 > IM軟件在智能電話(huà)終端上的設計與實(shí)現

IM軟件在智能電話(huà)終端上的設計與實(shí)現

作者: 時(shí)間:2010-01-12 來(lái)源:網(wǎng)絡(luò ) 收藏
2.2 開(kāi)放源碼的選擇
  從底層開(kāi)始一個(gè)完整的MSN客戶(hù)端需要一定的時(shí)間。為了縮短開(kāi)發(fā)周期、節省開(kāi)發(fā)成本,本文采用開(kāi)源項目的方式,即在第三方MSN客戶(hù)端的基礎上進(jìn)行修改,使之滿(mǎn)足要求。這樣做的另外原因是可以從這些開(kāi)放源碼的中進(jìn)一步剖析出MSN的協(xié)議格式,即使MSN協(xié)議有了新的版本,只要這個(gè)軟件仍然可用,它所使用的新的協(xié)議格式級仍對開(kāi)發(fā)調整有重要的參考價(jià)值,可以據此重新調整軟件而無(wú)須去通過(guò)逆向工程的方法對MSN協(xié)議進(jìn)行分析。
  支持MSN協(xié)議的客戶(hù)端軟件很多,必須選擇適合于剪裁并且是基于Linux的開(kāi)放源碼系統,Gaim和Kmess都是不錯的選擇。其中Gaim是為L(cháng)inux操作系統而的一種即時(shí)消息傳遞軟件,它可以同時(shí)支持MSN、ICQ、A和Yohoo等多種客戶(hù)端通信,但是它的軟件結構比較復雜。Kmess也是基于Linux的開(kāi)放源碼系統,它只能支持MSN客戶(hù)端,從開(kāi)發(fā)者的角度而言,Kmess因其結構相對簡(jiǎn)單則更易于分析和改進(jìn)。所以這里選擇了Kmess作為MSN客戶(hù)端軟件的開(kāi)發(fā)藍本。
2.3 IM開(kāi)放源碼的修改
  盡管Kmess是基于Linux平臺的支持MSN客戶(hù)端的即時(shí)消息傳遞軟件,但并不是直接搬過(guò)來(lái)就能用,必須進(jìn)行大量的修改工作。首先Kmess是基于KDE環(huán)境而開(kāi)發(fā)的應用程序,在源代碼中大量使用KDE庫函數,而KDE庫本身就有數百兆,受到原型機存儲容量的限制,不可能在原型機上KDE環(huán)境;其次Kmess是一個(gè)功能完善的MSN客戶(hù)端,其中包括許多增強功能如文件傳送、多方聊天、語(yǔ)音聊天和視頻聊天等,由于在目前的上暫不考慮這些功能,因此對源碼的修改和剪裁是必不可少的。
針對上面的二個(gè)問(wèn)題,對Kmess軟件進(jìn)行了較大的調整,主要保留了與MSN協(xié)議處理的相關(guān)的內容。具體調整如下:
  (1)重新界面部分
  由于Kmess中的用戶(hù)界面是基于KDE環(huán)境,而原型機上采用的是Qt-Embeded,因此界面部分基本不能用,本文用Qt designer重新了登錄窗口、主菜單、聯(lián)系人窗口、會(huì )話(huà)窗口等,在這些界面中再調用Kmess的函數。
  (2)KDE庫函數的替換
  將源代碼中的基于KDE的庫函數用Qt-Embeded提供的類(lèi)函數來(lái)實(shí)現。由于Qt-Embeded對一些基本功能的實(shí)現都有很好的支持,所以找到它們的對應實(shí)現方法并不困難,惟一的例外是SSL的實(shí)現。
  (3)剪裁部分源代碼
  分析Kmess的源碼結構,刪除不需要實(shí)現的功能部分,構建自己需要的體系結構。由于Kmess的模塊之間有著(zhù)緊密聯(lián)系,因此并不是簡(jiǎn)單剔除實(shí)現這些增強功能的類(lèi)函數就可以完成的。首先必須理清Kmess的層次結構及模塊與模塊之間的相互關(guān)系,只有在對整體結構有了清晰的了解之后才能夠著(zhù)手剪裁工作。
2.4 IM網(wǎng)絡(luò )安全的實(shí)現
  在登錄過(guò)程中,用戶(hù)要向NS服務(wù)器發(fā)送賬號和密碼來(lái)通過(guò)驗證,只有合法的注冊用戶(hù)才能使用即時(shí)消息收發(fā)功能,因此對用戶(hù)賬號和密碼必須進(jìn)行加密。MSN客戶(hù)端采用SSL(Secure Socket Layer)技術(shù)來(lái)保證賬號信息的安全性。SSL即安全套接層,是介于應用層和TCP層之間的一個(gè)薄層。使用SSL協(xié)議的雙方可以在一個(gè)不安全的公共信道上協(xié)商加密算法和加密密鑰,并使用協(xié)商好的算法和密鑰將應用層的數據加密成密文,然后在網(wǎng)絡(luò )上傳輸。這樣即使第三方截獲了該密文,由于沒(méi)有解密算法和密鑰,也無(wú)法解密出明文數據,從而確保網(wǎng)絡(luò )數據的安全性。
2.5 應用程序的移植
  由于在原型機上開(kāi)發(fā)和調試應用程序有相當大的困難,因此需要在PC上先進(jìn)行仿真開(kāi)發(fā),然后再下載到原型機上。
  (1)PC機與原型機的通信
  PC機通過(guò)串口與原型機交換數據。在Linux中,串口的設備文件一般為/dev/ttyS0和/dev/ttyS1,分別表示串口1和串口2。首先用open命令打開(kāi)串口,然后根據具體的應用來(lái)配置串口,設置波特率、校驗方法、數據位、停止位和流控制等參數。設置完成后,就可以通過(guò)MINICOM串口通信程序,完成PC與原型機之間應用程序的下載和調試結果的上傳等操作。
  (2)應用程序的交叉編譯
  整個(gè)開(kāi)發(fā)過(guò)程分為二個(gè)階段:第一階段,開(kāi)發(fā)者在PC環(huán)境下使用Qt-Embeded進(jìn)行應用程序開(kāi)發(fā),通過(guò)gcc編譯器生成在PC上可以執行的目標代碼,然后使用QVFB模擬原型機的運行效果,經(jīng)過(guò)不斷的調整直到滿(mǎn)足用戶(hù)的要求;第二階段,根據CPU體系結構的不同,對PC上實(shí)現的應用程序作相應的調整后,再使用arm-Linux-gcc將程序重新交叉編譯為在原型機上可執行的代碼,最后將該代碼下載到原型機的Flash中,從而完成原型機上的即時(shí)消息軟件的開(kāi)發(fā)。由于在PC機上已經(jīng)用QVFB模擬過(guò)軟件的運行情況,因此下載到原型機上后能基本上確保軟件的正確性,從而大大提高了開(kāi)發(fā)效率。
  (3)OpenSSL庫的交叉編譯
  OpenSSL庫是作為目標代碼被調用的,因此還需要進(jìn)行OpenSSL庫的移植工作。首先需在PC上對OpenSSL庫進(jìn)行交叉編譯,生成目標平臺上使用的二進(jìn)制文件,然后將其載入目標平臺。為了使OpenSSL庫能夠在A(yíng)RM嵌入式平臺上運行,首先要為OpenSSL的Makefile文件加入一個(gè)名為“opensslForARM.Makefile.patch”的補丁,再用arm-Linux-gcc編譯生成可執行代碼。
  (4)OpenSSL庫的注冊
  交叉編譯OpenSSL成功后,使用MINICOM將其下載到原型機上,但此時(shí)仍然無(wú)法正常使用OpenSSL庫函數。這是因為在Linux中只有經(jīng)過(guò)注冊的庫,才能成為共享動(dòng)態(tài)鏈接庫。Linux下的共享庫采用了類(lèi)似于高速緩存的機制,將共享庫所在的目錄信息首先保存在/etc/ld.so.cache中。應用程序需要連接時(shí)先在這個(gè)文件里查找,若找不到再去ld.so.conf的路徑里查找。動(dòng)態(tài)鏈接庫的管理命令ldconfig會(huì )在默認目錄(/lib和/usr/lib)和動(dòng)態(tài)庫配置文件/etc/ld.so.conf內所列的目錄下,搜索出可共享的動(dòng)態(tài)鏈接庫,進(jìn)而創(chuàng )建出動(dòng)態(tài)裝入程序(ld.so)所需的連接和緩存文件,并將已排序的動(dòng)態(tài)鏈接庫名稱(chēng)列表存放在默認文件/etc/ld.so.cache中。用戶(hù)首先將ldconfig下載到原型機上,然后在ld.so.conf文件中指定OpenSSL的路徑,運行ldconfig命令即可自動(dòng)完成整個(gè)注冊過(guò)程。
3 結束語(yǔ)
  在上構造MSN客戶(hù)端軟件,首先要考慮目標平臺的特點(diǎn)及資源的有限性,選擇實(shí)現其中最基本和最常用的功能;然后借助于已有的開(kāi)放源碼成果,選擇一個(gè)合適的開(kāi)源項目,并對其界面部分和相關(guān)庫函數進(jìn)行調整和調試,使之滿(mǎn)足目標平臺的運行要求;最后通過(guò)交叉編譯的方法生成目標平臺上的可執行代碼并下載到上。充分利用現有的開(kāi)源成果不僅可以大大簡(jiǎn)化對MSN專(zhuān)用協(xié)議的分析和實(shí)現過(guò)程,而且也進(jìn)一步降低了軟件的開(kāi)發(fā)成本,縮短了軟件的開(kāi)發(fā)周期,使智能電話(huà)終端具有更好的性?xún)r(jià)比。

本文引用地址:http://dyxdggzs.com/article/166799.htm

上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>