趙向兵,張景安
Linux平臺(tái)即時(shí)通信系統(tǒng)的研究與開發(fā)
趙向兵,張景安
(山西大同大學(xué)數(shù)學(xué)與計(jì)算機(jī)科學(xué)學(xué)院,山西 大同 037009)
針對(duì)目前信息安全成為國家重要安全戰(zhàn)略,中國軍用電腦已裝國產(chǎn)操作系統(tǒng)“麒麟”等,信息電子產(chǎn)品國產(chǎn)化必將成為趨勢(shì),而麒麟操作系統(tǒng)是一款基于Linux的操作系統(tǒng),但是在Linux局域網(wǎng)環(huán)境下沒有一款即時(shí)通信軟件可供選擇。經(jīng)研究Linux Socket網(wǎng)絡(luò)編程,及用戶界面編程知識(shí),本文設(shè)計(jì)出基于Linux的C/S模式即時(shí)通信系統(tǒng),此設(shè)計(jì)基于Linux C語言開發(fā),使用GTK制作圖形界面,并涉及到TCP/IP和POP/SMTP協(xié)議,實(shí)現(xiàn)聊天,記錄聊天記錄,發(fā)送電子郵件,發(fā)送文件功能。從而填補(bǔ)國家信息電子產(chǎn)品國產(chǎn)化在即時(shí)通信方面的空白。
信息安全;麒麟操作系統(tǒng);Liunx;即時(shí)通信系統(tǒng)
2013年“棱鏡門”事件已經(jīng)暴露了我國國內(nèi)信息安全的極大隱患,國內(nèi)的重要信息系統(tǒng)、操作系統(tǒng)、數(shù)據(jù)庫、中間件等幾乎都來自國外產(chǎn)品,國內(nèi)信息電子產(chǎn)品主要部件過度依賴進(jìn)口,如果信息電子產(chǎn)品植入監(jiān)測(cè)插件,就會(huì)成為竊取情報(bào)的手段。隨著信息安全隱患問題日漸凸顯,國家已經(jīng)加強(qiáng)重視信息安全問題,并把信息安全列入國家重要安全戰(zhàn)略之中。微軟目前主打的Windows 8操作系統(tǒng)采用不安全的技術(shù)架構(gòu),并且系統(tǒng)集成的殺毒軟件可以自由掃描用戶電腦,勢(shì)必失去電腦的控制權(quán),導(dǎo)致用戶個(gè)人信息的泄漏。2014年5月中央國家機(jī)關(guān)政府采購中心發(fā)布通知,中央機(jī)關(guān)所有計(jì)算機(jī)類產(chǎn)品不允許安裝Windows 8操作系統(tǒng)。同時(shí),我國將實(shí)行網(wǎng)絡(luò)安全審查制度,工信部也提出措略支持國內(nèi)軟件信息服務(wù)業(yè)發(fā)展。要解決國家安全戰(zhàn)略問題迫切需要國內(nèi)信息安全的自主創(chuàng)新,自主可控的國產(chǎn)產(chǎn)品才是安全可信的,才能真正全面完整有效抵御境內(nèi)外敵對(duì)黑客勢(shì)力的滲透、入侵[1]。
在網(wǎng)絡(luò)越來越發(fā)達(dá)的今天,人們對(duì)網(wǎng)絡(luò)的依賴越來越多,越來越離不開網(wǎng)絡(luò),網(wǎng)絡(luò)聊天已成為上網(wǎng)族的一種普遍的休閑方式,所以,一款好的即時(shí)通信[2-3]聊天軟件成了上網(wǎng)的必備工具之一。國產(chǎn)操作系統(tǒng)基本以安全性能良好的Linux操作系統(tǒng)為基礎(chǔ),但是當(dāng)前在Linux局域網(wǎng)環(huán)境下沒有一款即時(shí)通訊軟件可供選擇,本文設(shè)計(jì)出基于Linux的C/S模式即時(shí)通訊系統(tǒng),它是基于Linux C語言開發(fā),使用GTK+制作圖形界面,并涉及到TCP/IP和POP/SMTP協(xié)議,實(shí)現(xiàn)聊天,記錄聊天記錄,發(fā)送電子郵件,發(fā)送文件功能。
1.1服務(wù)器端功能
系統(tǒng)對(duì)于用戶權(quán)限的限制主要是在服務(wù)器端(如圖1)進(jìn)行管理控制。管理員登錄系統(tǒng)后,開啟服務(wù)器,可對(duì)用戶資料和聊天記錄進(jìn)行查詢、刪除等操作。這些數(shù)據(jù)和信息將存入后臺(tái)數(shù)據(jù)文件中保存,而普通用戶只有通過注冊(cè)到服務(wù)器后驗(yàn)證通過才可使用服務(wù)器提供的服務(wù),服務(wù)器具有的功能:驗(yàn)證登陸信息,發(fā)送系統(tǒng)信息,處理新用戶的申請(qǐng)信息,更新用戶服務(wù)。
圖1 服務(wù)器功能結(jié)構(gòu)圖
1.2客戶端功能
客戶端基本功能包括:(1)用戶的登錄與注冊(cè):記錄用戶的個(gè)人提交信息,包括合法郵箱等,注冊(cè)成功后返回賬號(hào)作為用戶系統(tǒng)唯一標(biāo)識(shí)。在下次登錄的時(shí)候,即可僅通過驗(yàn)證賬號(hào)和密碼來實(shí)現(xiàn)登錄;(2)用戶之間的信息交換:用戶好友列表中的互加好友可以完成文字信息和文件的傳遞;(3)用戶資料的查看和修改:在聊天的過程中,用戶能查看感興趣用戶的個(gè)人信息;(4)顯示在線好友:用戶登陸后會(huì)從服務(wù)器返回用戶的對(duì)應(yīng)好友列表信息及登陸狀態(tài)信息;(5)利用POP3協(xié)議發(fā)送指向特定郵箱的郵件。
2.1數(shù)據(jù)表結(jié)構(gòu)設(shè)計(jì)
本系統(tǒng)服務(wù)器采用Mysql數(shù)據(jù)庫軟件,Mysql是一個(gè)開源的小型的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)[4]。目前Mysql數(shù)據(jù)庫集成LMAP、WMAP框架,其體積小、速度快、總體擁有成本低,作為WEB開發(fā)中后臺(tái)數(shù)據(jù)存儲(chǔ)的主流平臺(tái)[5-6]。
數(shù)據(jù)庫(Mysql):在使用Mysql時(shí)必須將數(shù)據(jù)庫帳號(hào)設(shè)置成root密碼:123456,該數(shù)據(jù)庫中包含有一個(gè)用戶表,服務(wù)器處理用戶信息都是對(duì)這個(gè)表進(jìn)行操作的。用戶表(usermsg):用戶表里包含了用戶的所有可以用到的信息,有帳號(hào),稱昵,密碼等信息。用戶信息表(usermsg)見表1。
圖2 客戶端整體框架
表1 用戶信息表(usermsg)
2.2GTK +和Mysql開發(fā)過程中的問題
結(jié)合Mysql、Linux、GTK +開發(fā)系統(tǒng),為了解決GTK+缺少數(shù)據(jù)庫API的問題,本文利用Mysql提供的CAPI 實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ),GTK+僅作為用戶間交互的界面開發(fā)。利用GTK+提供的事件傳遞機(jī)制實(shí)現(xiàn)整個(gè)模塊功能的集成[7]。下面是一個(gè)GTK +和Mysql相結(jié)合的示例程[8]:
Mysql操作程序結(jié)構(gòu):
void db-operate (char *abname)
{ Interface-create();/ /界面的初始化
db-init (dbname) //數(shù)據(jù)庫的初始化
operate(); // 數(shù)據(jù)庫操作
db-cIose(); / / 數(shù)據(jù)庫關(guān)閉
}
主程序結(jié)構(gòu):
gtk-init (Sargc, Sargv);/ /GTK + 初始化
db-operate (“db-name”)/ / MySOL操作
gtk-main ();/ /GTK + 事件循環(huán)
2.3系統(tǒng)界面設(shè)計(jì)
GTK +有豐富的GTK Widget構(gòu)件,這些構(gòu)件實(shí)現(xiàn)了類型、繼承檢驗(yàn)和信號(hào)/回調(diào)函數(shù)的基礎(chǔ)結(jié)構(gòu)。由C語言編寫這一特性決定了它有很好的可移置性。本文采用GTK+2.0編程技術(shù)實(shí)現(xiàn)服務(wù)器端和客戶端程序界面設(shè)計(jì)。通過GTK +的事件傳遞機(jī)制。實(shí)現(xiàn)通信連接、信息發(fā)送、信息提交,信息驗(yàn)證,文件傳送等功能[9],即時(shí)通訊系統(tǒng)主要界面包括:1)登陸界面:雙擊客戶端應(yīng)用程序,彈出登錄窗口,本界面需要兩個(gè)文本框和兩個(gè)命令按鈕,一個(gè)是用戶賬號(hào)文本框,一個(gè)是用戶密碼文本框和一個(gè)登陸按鈕,一個(gè)注冊(cè)按鈕;2)注冊(cè)界面:點(diǎn)擊注冊(cè)按鈕跳到注冊(cè)窗口,輸入指定信息注冊(cè)成功后彈出賬號(hào)提示信息,這時(shí)請(qǐng)牢記自己注冊(cè)的賬號(hào),返回登錄。應(yīng)設(shè)計(jì)四個(gè)文本框和兩個(gè)命令按鈕,四個(gè)文本框分別用于輸入網(wǎng)名,密碼,密碼,電子郵件,兩個(gè)按鈕分別是提交和重置;3)主界面:登陸成功后可彈出好友列表即主界面,該頁面顯示所有在線的好友,主窗口會(huì)顯示當(dāng)前用戶的信息及好友列表,好友列表分成在線好友和不在線好友,不能與不在線好友聊天,單擊一個(gè)不在線好友即彈出不能會(huì)話提示對(duì)話框;4)聊天界面:點(diǎn)擊在線好友,可彈出聊天對(duì)話框,包含的構(gòu)件應(yīng)該有一個(gè)顯示聊天消息的列表框,一個(gè)發(fā)消息的文本框和一個(gè)歷史記錄按鈕,一個(gè)文件傳輸按鈕及一個(gè)發(fā)送郵件按鈕;5)文件傳輸界面:文件傳輸界面有包含一個(gè)選擇文件的選擇框和一個(gè)發(fā)送按鈕;6)發(fā)送郵件界面:一個(gè)輸入電子郵件地址的文本框,一個(gè)輸入標(biāo)題的文本框,一個(gè)輸入正文的列表框及一個(gè)發(fā)送按鈕;7)聊天記錄界面:聊天記錄界面只要一個(gè)顯示聊天記錄的列表框就行了。
網(wǎng)絡(luò)通信的關(guān)鍵是Socket(套接字),是一個(gè)通信鏈的句柄,用于描述IP地址、端口號(hào),連接建立后,則可以發(fā)送消息或執(zhí)行命令。采用C/S模式的程序中,服務(wù)器端和客戶端都要擁有屬于自己的Socket。通常服務(wù)器程序用listen(sockfd,MAX_ CLIENT)監(jiān)聽指定的端口,接收用戶的Socket請(qǐng)求,異步處理多個(gè)登陸管理員客戶端的請(qǐng)求。假如客戶端發(fā)出TCP請(qǐng)求,服務(wù)器會(huì)新建專用與這個(gè)客戶通信的Socket,并把這個(gè)Socket加入到FD_SET套接字集合中,運(yùn)用select(maxfd,&sockset,NULL,NULL,NULL),循環(huán)遍歷所有的Socket處理有信息請(qǐng)求的客戶端請(qǐng)求。遠(yuǎn)端客戶端,使用Socket通過connet( )向服務(wù)器發(fā)出連接請(qǐng)求,服務(wù)器返回接受確認(rèn)后,就可以發(fā)送消息或執(zhí)行命令,并且建立不死線程通過該線程等待服務(wù)器給客戶端的信息,具體是通過select(sockfd+1,&sockset,NULL,NULL,NULL)阻塞等待服務(wù)器的信息。會(huì)話完成后,關(guān)閉Socket[10]。
遠(yuǎn)程控制通過如下幾個(gè)步驟實(shí)現(xiàn):
第一步,Socket定義,本系統(tǒng)服務(wù)器端采用重復(fù)服務(wù)器模型[9],算法[14]如下:
SOCKET( ); //建立Socket
BIND( ); //與網(wǎng)絡(luò)地址和端口號(hào)綁定
LISTEN( ); //在綁定的套接字上監(jiān)聽客戶端發(fā)來的網(wǎng)絡(luò)請(qǐng)求
FD_ZERO( ); //清空套接字集合
FD_SET(sockfd,&sockset);//將監(jiān)聽套接字加入集合初始集合
maxfd=max(maxfd,sockfd+1); //替換最大的套接字號(hào)
for (;;)
{ select(maxfd,&sockset,NULL,NULL,NULL);//異步遍歷套接字集合查看狀態(tài)有沒有變化
new_sockfd =ACCEPT( ); //接受狀態(tài)有變化的套接字
FD_SET(new_sockfd,&sockset);//將監(jiān)聽到的套接字入集合
WHILE(1)
{
READ( ); //從套接字中讀取數(shù)據(jù)
PROCESS( ); //解析收到的數(shù)據(jù)包,匹配后進(jìn)入第六步進(jìn)行相應(yīng)的處理
WRITE( ); //從套接字中寫入數(shù)據(jù)
CLOSE( ); //關(guān)閉套接字
}
第二步,接收數(shù)據(jù),解包,實(shí)現(xiàn)數(shù)據(jù)檢測(cè)和匹配;
4.1Linux內(nèi)核線程處理機(jī)制
即時(shí)通信啟動(dòng)后,程序要一直在監(jiān)聽是否有新的信息到達(dá)?;诠δ芴匦詻Q定為避免程序進(jìn)入假死狀態(tài),程序要采用多線程機(jī)制。將等待監(jiān)聽作為一個(gè)單獨(dú)運(yùn)行的子線程,可以提高程序響應(yīng)效率,提高用戶體驗(yàn),這個(gè)線程也叫心跳線程。本系統(tǒng)在main( )函數(shù)中創(chuàng)建多個(gè)線程,由linux系統(tǒng)組織線程的合利調(diào)度[12]。
GTK+中使用線程,利用g_thread_init(NULL)和gdk_threads_init()完成前期工作。g_thread_create()函數(shù)創(chuàng)建線程,接收消息的線程由g_thread_create()函數(shù)創(chuàng)建。線程的具體事件回調(diào)函數(shù)由get_message()函數(shù)執(zhí)行。對(duì)于GTK+設(shè)計(jì)中的線程互斥由于gdk_threads_enter(),gdk_threads_leave()完成全局鎖的獲得和釋放。心跳線程啟動(dòng)后信息回調(diào)函數(shù)就被激活。各功能子線程各司其職完成相應(yīng)的操作。同樣,客戶端的多線程編程與此類似。
4.2GTK消息處理機(jī)制
GTK+的本質(zhì)是事件驅(qū)動(dòng),gtk-main()函數(shù)啟動(dòng)時(shí)程序進(jìn)行靜默狀態(tài),用戶點(diǎn)擊界面操作后激活事件,程序被喚醒,GTK+將主線程執(zhí)行權(quán)交給處理用戶操作的函數(shù),這一系列操作都是由ANSI C語言完成功能邏輯的。窗口控件事件發(fā)生,激活消息信號(hào),GTK+專門的信號(hào)處理機(jī)制會(huì)捕獲信號(hào)[13],將激活相應(yīng)的回調(diào)函數(shù)完成信號(hào)處理。
對(duì)象事件與回調(diào)函數(shù)的關(guān)聯(lián)標(biāo)簽是由不同的返回值決定的。按照函數(shù)聲明的順序執(zhí)行回調(diào)函數(shù),可以解決同一個(gè)對(duì)象與多個(gè)回調(diào)函數(shù)的匹配。信號(hào)處理器的創(chuàng)建函數(shù)定義中,參數(shù)object表示產(chǎn)生信號(hào)的 widget構(gòu)件,參數(shù)name表示捕獲的事件或信號(hào)的名稱,參數(shù)callback-func表示事件的回調(diào)函數(shù)名稱,參數(shù)func-data表示回調(diào)函數(shù)的參數(shù)存在[11]。要在主程序的前面定義回調(diào)函數(shù),函數(shù)聲明為:void callback-func(Gtkwidget widget,gpointer func-data)。以服務(wù)器啟動(dòng)主程序?yàn)槔?,服?wù)器啟動(dòng)主程序啟動(dòng)函數(shù)是:void button_start_clicked(GtkWidget * button,gpointer data)。
這個(gè)函數(shù)是進(jìn)入主線程的接口,它初始化一些變量,打開監(jiān)聽端口及進(jìn)入主線程。服務(wù)器啟動(dòng)時(shí)會(huì)通過POP3將啟動(dòng)好的服務(wù)器地址及端口號(hào)發(fā)到互聯(lián)網(wǎng)上的一個(gè)郵箱上去,原因客戶會(huì)使用這個(gè)地址及端口號(hào),客戶端啟動(dòng)時(shí)從郵箱中讀這個(gè)郵件就可以知道服務(wù)器啟動(dòng)時(shí)的IP地址及端口號(hào)了,這樣省去很多麻煩,其實(shí)現(xiàn)包含在下面的函數(shù)中:
void button_start_clicked(GtkWidget * button,gpointer data);
主線程負(fù)責(zé)創(chuàng)建激活其他四個(gè)子線程,主線程函數(shù)原型是:
void go_to(void);
下面介紹由主線程創(chuàng)建的四個(gè)子線程的作用及函數(shù)原型。負(fù)責(zé)處理登陸信息的線程的函數(shù)原型:
void func_check(struct check *k);
負(fù)責(zé)處理注冊(cè)信息的線程的函數(shù)原型:
void func_check(struct check *k);
負(fù)責(zé)處理退出信息的線程的函數(shù)原型:
void func_quit(char ipip[40]);
系統(tǒng)消息是通過一個(gè)函數(shù)一個(gè)一個(gè)向所有在線用戶發(fā)的系統(tǒng)消息,這個(gè)函數(shù)原型是:
void button_message_clicked(GtkWidget * button,gpointer data);
給出程序中函數(shù)之間運(yùn)行順序跟關(guān)系的參照?qǐng)D如圖3所示。
圖3 函數(shù)之間運(yùn)行順序跟關(guān)系的參照?qǐng)D
在Linux環(huán)境下運(yùn)行客戶端,以局域網(wǎng)中的一臺(tái)主機(jī)作為服務(wù)器。另外選取兩到三臺(tái)電腦作為工作用戶機(jī)按照如下進(jìn)行測(cè)試:
(1)注冊(cè)測(cè)試
(2)登陸測(cè)試
(3)私聊測(cè)試
(4)文件傳輸測(cè)試
(5)接收系統(tǒng)消息測(cè)試
測(cè)試的結(jié)果為:
1. 注冊(cè)頁面輸入以下信息:網(wǎng)名:王曉博,密碼:123456;第二個(gè)密碼框:123456,電子郵件:1wangxiaobo@163.com得到:(登陸賬號(hào):10012)注冊(cè)成功的頁面如圖3所示。
2. 登陸頁面輸入以下信息:帳號(hào):10012 ,密碼:123456。登陸成功的結(jié)果如圖4所示。
3. 首先登陸兩個(gè)賬號(hào),如(賬號(hào)10011,密碼123;賬號(hào)10013,密碼123456)。然后. 打開聊天窗口,相互發(fā)送信息如圖5所示。
4. 在聊天窗口點(diǎn)擊消息記錄按鈕,選擇一個(gè)文件如圖6所示。點(diǎn)擊確定。而后發(fā)送結(jié)果如圖7所示。
5. 在服務(wù)器發(fā)一個(gè)系統(tǒng)消息,客戶端接收如圖8所示。
圖3 返回注冊(cè)賬號(hào)圖
圖4 返回好友列表
圖5 兩個(gè)人進(jìn)行聊天
圖6 選擇文件
圖7 發(fā)送結(jié)果圖
8 系統(tǒng)消息圖
隨著國內(nèi)電子信息產(chǎn)品國產(chǎn)化,在Linux環(huán)境下開發(fā)即時(shí)通信系統(tǒng)勢(shì)在必行,本文實(shí)現(xiàn)的基于Liunx + Mysql + C + GTK設(shè)計(jì)的即時(shí)通信系統(tǒng),這種環(huán)境具有極高的性能價(jià)格比,較強(qiáng)的安全性,為減少信息安全隱患,防止信息外泄做出貢獻(xiàn)。現(xiàn)階段此即時(shí)通信工具尚未達(dá)到強(qiáng)大功能,在下一階段將繼續(xù)把這個(gè)即時(shí)通信系統(tǒng)的功能更加完善。
[1] 吳勇毅. 工信部力挺軟件國產(chǎn)化政策機(jī)遇促行業(yè)大發(fā)展.通信信息報(bào)[DB/OL] http://it.people.com.cn/n/2014/0605/ c1009-25108211.html.
[2] 劉皓. 分布式環(huán)境下可靠數(shù)據(jù)同步及通訊的協(xié)議分析[J].軟件, 2015, 36(9): 113-116.
[3] 張勇, 裴東良, 張會(huì)兵. 消息傳輸系統(tǒng)研究[J]. 軟件, 2016, 37(3): 51-54.
[4] Shuyan SUN, Xiaojuan QI, Yongji YANG. The Design of Scientific Research Project Management System in Universities[J]. Management Science and Engineering, 2014, 8(1): 57-61.
[5] Yuanzhe Zhao, Chundong Hu, Peng Sheng, Xiaodan Zhang, Deyun Wu, Qinglong Cui, Rui Zhang, Yulian Lin, Application Software of Main Control Server for Neutral Beam Injection Control System[J]. Journal of Fusion Energy, 2014, 33(4): 412-416.
[6] 周京暉. 集成消息服務(wù)和定時(shí)通知的分布式內(nèi)存數(shù)據(jù)庫[J].軟件, 2013, 34(1): 89-92.
[7] 陳特放, 黎丹. Linux下用GTK+和MySQL開發(fā)基于TCP/IP的網(wǎng)絡(luò)聊天室[J]. 長(zhǎng)沙大學(xué)學(xué)報(bào). 2006, 20(5): 54-58.
[8] 宋勁杉. Linux C編程一站式學(xué)習(xí)[M]. 電子工業(yè)出版社, 2009: 276-284.
[9] Harlow E Developing Linux Application with GTK+ and GDK[M]. MacmillanComputer Publishing House, 1999.
[10] 左巖, 趙建玉, 張紅. 基于Linux的嵌入式數(shù)據(jù)采集裝置的TCP/IP通信[J]. 暨南大學(xué)學(xué)報(bào)(自然科學(xué)版). 2014, 28(3): 194-197.
[11] 苑曉芳, 劉志廣. Linux下基于TCP傳輸組建的實(shí)現(xiàn)[J]. 無線電通信技術(shù), 2014, 40(4): 46-49.
[12] Neil Matthew, Richard Stones. Beginning Linux Programming(4 edition)[M]. Wrox, 2007.
[13] 余長(zhǎng)江, 周淵平, 呂海龍. Linux平臺(tái)下基于GTK+的聊天室設(shè)計(jì)[J]. 通信技術(shù), 2012, 45(5): 98-100.
[14] Emoto. M, Shibata. K, Watanabe. K, Ohdachi. S, Ida. K, Sudo. S. Development of a flexible visualization tool[J]. Fusion Engineering and Design, 2002, 60(3): 367-371.
R&D of the Linux-Based Instant Messaging System
ZHAO Xiang-bing, ZHANG Jing-an
(School of Mathematics and Computer Science, Shanxi Datong University, Datong Shanxi 037009)
For current Information Security has become an important national security strategy, China-made military computer operating system “unicorn” has been installed, and domestic electronic information products will become the trend, while Kylin operating system is a Linux-based operating system, but under the Linux LAN environment there is not an instant messaging software to choose from.After studying Linux Socket network programming, and UI programming knowledge, this paper designs for instant messaging system which is based on Linux C/S mode, and Linux C language development, using GTK graphical interface, relating to TCP / IP and POP / SMTP protocol for chat, recording chats,sending an e-mail, sending the file. So it fills the national electronic information products localization in Instant Messaging System gaps.
Information security; Kylin operating system; Liunx; Instant messaging system
TP311.52
A
10.3969/j.issn.1003-6970.2017.02.006
山西省軟科學(xué)研究計(jì)劃項(xiàng)目(2014041049-1);大同市軟科學(xué)研究計(jì)劃項(xiàng)目(2014112-2)
趙向兵(1978-),男,講師,主要研究方向:數(shù)據(jù)挖掘、大數(shù)據(jù)。張景安(1970-),男,教授,主要研究方向:云計(jì)算、計(jì)算機(jī)網(wǎng)絡(luò)應(yīng)用技術(shù)。
本文著錄格式:趙向兵,張景安. Linux平臺(tái)即時(shí)通信系統(tǒng)的研究與開發(fā)[J]. 軟件,2017,38(2):23-27