吳曉華 梁哲 劉同來(lái)
摘要:為實(shí)現(xiàn)局域網(wǎng)內(nèi)多個(gè)終端間信息、文件互通,同時(shí)滿足用戶對(duì)數(shù)據(jù)傳輸?shù)募磿r(shí)性需求,結(jié)合P2P、Socket等通信技術(shù),設(shè)計(jì)了一個(gè)多線程即時(shí)通訊系統(tǒng)。系統(tǒng)實(shí)現(xiàn)了局域網(wǎng)絡(luò)中用戶登錄、在線用戶列表實(shí)時(shí)更新、即時(shí)性信息傳輸以及文件傳輸?shù)裙δ?。系統(tǒng)摒棄第三方集中服務(wù)器,有效提升了數(shù)據(jù)傳輸?shù)陌踩?同時(shí),數(shù)據(jù)傳輸不需第三方中轉(zhuǎn),其傳輸速率可得到大幅提升。此外,系統(tǒng)采用多線程通信技術(shù),進(jìn)一步加速了大文件的傳輸速率。
關(guān)鍵詞:C#;P2P;局域網(wǎng);多線程;Socket
中圖分類號(hào):TP311.52? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2021)36-0075-04
開放科學(xué)(資源服務(wù))標(biāo)識(shí)碼(OSID):
A C#-based Multi-Thread P2P Communicating System
WU Xiao-hua1, LIANG Zhe2, LIU Tong-lai3
(1.Network and Information Technology Center, Guilin University of Electronic Technology, Guilin 541004, China; 2. China Mobile Guangxi Company, Nanning 530000, China; 3. College of Information Science and Technology, Zhongkai University of Agriculture and Engineering, Guangzhou 510225, China)
Abstract: To achieve the message and file interchange among multiple clients, as well as the immediacy demand of data transmission of the clients in a local area network, a multi-thread real-time communicating system is designed using technologies such as peer-to-peer, socket and so on. The system realized the functions of user login, real-time updates of online user list, real-time message and file transmission, etc. The system eliminates the third-party centralized server, which effectively improves the security of data transmission; In the meanwhile, since there is no need for a third party to transfer data, the data transmission rate can be greatly increased. In addition, the system uses multi-thread technology, which further accelerates the transmission rate of large files.
Key words: C#; P2P; LAN; multi-thread; Socket
1 背景
作為效率低、費(fèi)用高的信件、電報(bào)、電話等老式通信技術(shù)的替代品,即時(shí)通訊系統(tǒng)因其快速、便捷等特點(diǎn),被人們廣泛應(yīng)用于教育、商業(yè)以及社交活動(dòng)中。同時(shí),隨著互聯(lián)網(wǎng)技術(shù)的迅速發(fā)展,即時(shí)通訊系統(tǒng)被賦予越來(lái)越多先進(jìn)的功能,如文件傳輸、遠(yuǎn)程視頻等,其實(shí)時(shí)性也得到不斷提高,給人們帶來(lái)諸多便利。
現(xiàn)有的即時(shí)通訊系統(tǒng),大多采用集中式服務(wù)器-客戶端架構(gòu)(即C/S架構(gòu))實(shí)現(xiàn)用戶注冊(cè)、登錄以及好友列表等功能。在此網(wǎng)絡(luò)架構(gòu)下,用戶憑據(jù)、聊天內(nèi)容等重要信息存儲(chǔ)在服務(wù)器端的數(shù)據(jù)庫(kù)中,任何能夠訪問(wèn)服務(wù)器和數(shù)據(jù)庫(kù)的人都可以輕松訪問(wèn)用戶信息,存在較大的安全隱患。同時(shí),其資源損耗總是集中在服務(wù)器端,運(yùn)營(yíng)成本較大。此外,一旦服務(wù)器發(fā)生故障,數(shù)據(jù)損失將不可挽回。
作為另一通信方案,點(diǎn)對(duì)點(diǎn)架構(gòu)(Peer to Peer,P2P),因其去中心化、健壯性、可擴(kuò)展性等優(yōu)勢(shì),廣泛應(yīng)用在即時(shí)通訊領(lǐng)域[1-2]。沒(méi)有了第三方服務(wù)器的介入,即時(shí)通訊系統(tǒng)將由用戶控制,信息安全由通訊雙方自主管理,大大提高了系統(tǒng)的安全性。
眾所周知,進(jìn)程是指在PC系統(tǒng)中正在運(yùn)行的一個(gè)應(yīng)用程序,是程序的基本執(zhí)行實(shí)體,它同所有進(jìn)程共享相同的一個(gè)存儲(chǔ)空間。而進(jìn)程的執(zhí)行需要依賴線程,也就是說(shuō),線程是進(jìn)程的最小執(zhí)行單位。一般來(lái)說(shuō),一個(gè)進(jìn)程中需要一個(gè)線程支撐。為加快文件的下載速率,本文采用多線程技術(shù)實(shí)現(xiàn)同步下載。
本文采用P2P、Socket、線程池等技術(shù),實(shí)現(xiàn)以下功能:
1)實(shí)現(xiàn)同一局域網(wǎng)內(nèi)用戶注冊(cè)、登錄、查看在線列表等功能,用戶主機(jī)之間實(shí)現(xiàn)即時(shí)通訊。
2)實(shí)現(xiàn)多用戶間文檔、音頻、圖片以及視頻等文件的傳輸。
3)實(shí)現(xiàn)多線程多任務(wù)同步,加速文件下載。
2 關(guān)鍵技術(shù)
2.1 P2P
與常見的C/S網(wǎng)絡(luò)架構(gòu)不同的是,P2P網(wǎng)絡(luò)環(huán)境中的節(jié)點(diǎn)既可以充當(dāng)服務(wù)器端,為其他節(jié)點(diǎn)提供服務(wù),如資源、算力共享,信息交換等;又可以作為客戶端,獲取其他節(jié)點(diǎn)提供的服務(wù)。網(wǎng)絡(luò)中彼此連接的每個(gè)節(jié)點(diǎn)之間沒(méi)有主從之分,其關(guān)系對(duì)等,因此又稱對(duì)等網(wǎng)絡(luò)[3]。如圖1所示為兩種不同網(wǎng)絡(luò)的基本架構(gòu)。
利用P2P技術(shù),可以充分利用邊緣網(wǎng)絡(luò)中潛在的帶寬資源以提高通信效率,同時(shí)還能克服中央服務(wù)器因帶寬、存儲(chǔ)等資源有限所導(dǎo)致的性能瓶頸。
2.2 多線程
為實(shí)現(xiàn)文件的多線程多任務(wù)同步,本文將文件的下載過(guò)程劃分為以下3個(gè)模塊:
1)任務(wù)創(chuàng)建
如圖2所示,每個(gè)待傳輸文件將被創(chuàng)建為一個(gè)任務(wù),即時(shí)通訊系統(tǒng)向PC請(qǐng)求當(dāng)前內(nèi)存使用狀況,并申請(qǐng)多開線程。當(dāng)線程數(shù)量確定時(shí),系統(tǒng)將對(duì)文件進(jìn)行分塊,以達(dá)到同時(shí)下載。最后發(fā)送線程啟動(dòng)消息,等待下載完成。
2)線程鎖機(jī)制
在多線程下載過(guò)程中,為避免多任務(wù)之間的線程互相干擾,保證線程的安全。如圖3所示,本文引入線程鎖機(jī)制,即某一進(jìn)程將某個(gè)線程占用時(shí),系統(tǒng)將對(duì)該線程進(jìn)行加鎖操作,直到該進(jìn)程結(jié)束,才對(duì)線程解鎖。這樣一來(lái),可以保證系統(tǒng)同時(shí)運(yùn)行多個(gè)線程時(shí),相互之間互不干擾,為實(shí)現(xiàn)多任務(wù)同步下載提供了技術(shù)支持[4]。
3)線程下載
線程接收到啟動(dòng)請(qǐng)求,獲取下載任務(wù)分配的數(shù)據(jù)分塊,此時(shí)線程被鎖。等到數(shù)據(jù)接收完畢之后,線程發(fā)送請(qǐng)求解鎖消息,系統(tǒng)釋放該線程,以便其他下載任務(wù)使用,如圖4所示。
2.3 局域網(wǎng)通訊
局域網(wǎng)通訊的高效、輕便、低成本、易于管理等特點(diǎn),使得其能應(yīng)用于校園網(wǎng)、企業(yè)網(wǎng)等封閉私有領(lǐng)域[5]?;诰钟蚓W(wǎng)的即時(shí)通信系統(tǒng)能夠快速建立局域網(wǎng)內(nèi)用戶的信息交流。廣域網(wǎng)上的即時(shí)通訊軟件,一般采用UDP或者TCP協(xié)議體系[6]。國(guó)內(nèi)常見的即時(shí)通信軟件有較早的MSN即時(shí)通信軟件,還有騰訊公司的QQ、微信等,國(guó)外有Line,WhatsApp,Skype等。這些軟件在實(shí)際體驗(yàn)方面各具優(yōu)勢(shì),也基本具備了實(shí)時(shí)通信、照片傳輸,甚至語(yǔ)音通話等功能[7]。然而這些軟件的具體實(shí)現(xiàn)代碼均屬于商業(yè)機(jī)密,各種技術(shù)細(xì)節(jié)不得而知。在局域網(wǎng)環(huán)境下,相較常見的基于廣域網(wǎng)環(huán)境設(shè)計(jì)的軟件,局域網(wǎng)即時(shí)通訊系統(tǒng)雖然更容易被實(shí)現(xiàn),但可借此理解TCP、UDP等通信協(xié)議以及Socket的實(shí)現(xiàn)原理,具有一定研究?jī)r(jià)值。
2.4 Socket
套接字(Socket)可以看作是雙向通訊信道中的一個(gè)端點(diǎn),其為不同主機(jī)之間通訊創(chuàng)建通信通道,一般由IP地址和端口組成,是一個(gè)通信鏈的句柄[8-9]。Socket的簡(jiǎn)單通信過(guò)程如圖5所示。首先,服務(wù)器端初始化Socket,綁定IP地址以及端口,同時(shí)服務(wù)器端對(duì)該端口進(jìn)行監(jiān)聽,等待客戶端的連接;這時(shí)有一個(gè)客戶端創(chuàng)建一個(gè)Socket,與該端口進(jìn)行連接,經(jīng)過(guò)“三次握手”之后,客戶端便可以與服務(wù)器端成功建立通訊;接著,客戶端可以向服務(wù)器端發(fā)送服務(wù)請(qǐng)求,比如數(shù)據(jù)共享、算力共享等;服務(wù)器端接受請(qǐng)求并處理,然后把請(qǐng)求的服務(wù)數(shù)據(jù)回饋給客戶端,客戶端讀取數(shù)據(jù);最后,連接關(guān)閉,一次通信交互結(jié)束。
基于Socket設(shè)計(jì)與實(shí)現(xiàn)局域網(wǎng)通訊,具有信息收發(fā)速度快、保密性好、易于編程實(shí)現(xiàn)等優(yōu)點(diǎn)。
3 系統(tǒng)功能
3.1 登錄模塊
用戶運(yùn)行即時(shí)通訊系統(tǒng),輸入用戶名登錄。登錄之后系統(tǒng)采用UDP廣播整個(gè)網(wǎng)段,同時(shí)檢測(cè)處于同一局域網(wǎng)環(huán)境中的在線用戶,并發(fā)送用戶名和IP地址信息,告知其他用戶“我已上線”。與此同時(shí),用戶接收上線用戶的廣播消息,并把廣播主機(jī)加入通信名單。至此,不同用戶間已經(jīng)能夠相互通訊。
3.2 通信模塊
通信模塊是本系統(tǒng)的主要模塊,該模塊實(shí)現(xiàn)了用戶間信息交流,文檔、圖片、音樂(lè)以及視頻等文件的傳輸,該模塊的實(shí)現(xiàn)主要基于Socket技術(shù)。Socket端口首先對(duì)系統(tǒng)中端口進(jìn)行監(jiān)聽,當(dāng)某個(gè)用戶請(qǐng)求文件傳輸時(shí),建立文件發(fā)送連接,同時(shí)對(duì)方建立接口進(jìn)行文件接收,以此實(shí)現(xiàn)文件傳輸功能。
3.3 實(shí)現(xiàn)多線程通信
對(duì)于P2P網(wǎng)絡(luò),每一個(gè)用戶既是客戶端又是服務(wù)器端,當(dāng)建立連接后,其中一個(gè)客戶端提出請(qǐng)求,服務(wù)器端將產(chǎn)生一個(gè)線程用來(lái)與該客戶端建立起Socket連接。由于線程的創(chuàng)建和銷毀會(huì)產(chǎn)生一定開銷,同時(shí)線程過(guò)多帶來(lái)調(diào)度開銷以及降低內(nèi)存資源利用率,進(jìn)而影響系統(tǒng)整體性能。出于對(duì)性能的考慮,本文引入線程池模式。線程池維護(hù)著多個(gè)線程,等待系統(tǒng)分配可并發(fā)執(zhí)行的任務(wù),線程執(zhí)行完畢之后不會(huì)立即被銷毀,避免了處理短期任務(wù)頻繁創(chuàng)建與銷毀線程導(dǎo)致的執(zhí)行延遲以及能耗等代價(jià)。
4 實(shí)驗(yàn)結(jié)果與分析
程序在三臺(tái)計(jì)算機(jī)上進(jìn)行了運(yùn)行,并測(cè)試功能的完備性,系統(tǒng)基于C#語(yǔ)言開發(fā),對(duì)系統(tǒng)的登錄功能、通信功能以及文件傳輸功能進(jìn)行了測(cè)試。
如圖6為此聊天系統(tǒng)的啟動(dòng)界面,顯示本機(jī)IP地址以及登錄用戶名。
如圖7所示,用戶成功登錄系統(tǒng),通過(guò)UDP向整個(gè)網(wǎng)段廣播,通知所有在線用戶。
如圖8所示,監(jiān)聽到新用戶上線所發(fā)送的UDP消息,將新上線用戶添加入通信列表。
局域網(wǎng)下文件的P2P共享,包括音頻、圖片以及視頻等文件的傳輸,是本系統(tǒng)最核心的功能,系統(tǒng)的多線程多任務(wù)主要在此模塊實(shí)現(xiàn),實(shí)現(xiàn)文件傳輸與通信功能同步。
如圖9所示,其中一個(gè)用戶向另一用戶發(fā)送文件,在選擇文件以及保存文件時(shí)調(diào)用Window自帶的文件存儲(chǔ)目錄,完成文件的發(fā)送和接收。
信息發(fā)送是本系統(tǒng)的另一個(gè)核心功能,包含以廣播形式發(fā)送的文字信息,以及選擇某個(gè)用戶進(jìn)行私聊的通信模塊,信息發(fā)送的實(shí)現(xiàn)同樣采用基于Socket技術(shù)。
如圖10所示,選擇想要進(jìn)行對(duì)話的用戶,應(yīng)用P2P技術(shù),便可進(jìn)行聊天,系統(tǒng)顯示用戶發(fā)送消息的時(shí)間、用戶名以及用戶IP地址。
5 結(jié)束語(yǔ)
本文所設(shè)計(jì)和實(shí)現(xiàn)的多線程P2P即時(shí)通訊系統(tǒng),采用了P2P技術(shù),Socket技術(shù)以及線程池等技術(shù),實(shí)現(xiàn)了登錄模塊,即時(shí)通訊模塊以及文件傳輸模塊。采用基于TCP的Socket通信機(jī)制,保證了網(wǎng)絡(luò)通信的準(zhǔn)確性、及時(shí)性。通過(guò)在三臺(tái)設(shè)備上進(jìn)行測(cè)試,系統(tǒng)運(yùn)行穩(wěn)定,文件傳輸速度快。系統(tǒng)很好地解釋了P2P、Socket以及多線程技術(shù)的實(shí)現(xiàn)原理,為后續(xù)開發(fā)多線程P2P通訊技術(shù)提供了參考。
參考文獻(xiàn):
[1] 李佳琦.基于P2P技術(shù)的即時(shí)通信監(jiān)控系統(tǒng)研究[J].中國(guó)管理信息化,2017,20(17):187-188.
[2] 王建.基于JXTA的P2P即時(shí)通信軟件的Java實(shí)現(xiàn)研究[J].無(wú)線互聯(lián)科技,2018,15(4):11-12.
[3] 江鳳蓮.P2P技術(shù)綜述[J].電腦知識(shí)與技術(shù)(學(xué)術(shù)交流),2006,2(12):36-37,65.
[4] 賀嘉貝.基于P2P的局域網(wǎng)多線程共享軟件設(shè)計(jì)[J].電腦編程技巧與維護(hù),2016(8):21-23,55.
[5] 徐文莉,熊燕,李燕.P2P即時(shí)通信系統(tǒng)關(guān)鍵技術(shù)研究及應(yīng)用[J].軟件導(dǎo)刊,2017,16(9):151-153,157.
[6] 光文華.基于局域網(wǎng)的即時(shí)通信軟件設(shè)計(jì)與實(shí)現(xiàn)[D].昆明:昆明理工大學(xué),2014.
[7] 朱浩悅,張軍軍,周楠,等.基于Socket的P2P在線通信系統(tǒng)的實(shí)現(xiàn)[J].黑龍江科技信息,2015(31):153.
[8] Yogi T,Shiroma T,Nagata T,et al.Study on P2P Communication between Web Browsers using WebSocket[J].Ieice Technical Report,2010(110):59-62.
[9] 朱浩悅,張軍軍,周楠,等.基于Socket的P2P在線通信系統(tǒng)的實(shí)現(xiàn)[J].黑龍江科技信息,2015(31):153.
【通聯(lián)編輯:謝媛媛】