徐江紅
(北京電子科技職業(yè)學(xué)院,北京100176)
互聯(lián)網(wǎng)正影響著世界的每一個(gè)角落,極大的改變著人們的生活?;ヂ?lián)網(wǎng)本身也在飛速發(fā)展,各種新技術(shù)層出不窮。即時(shí)消息傳遞(Instance Messaging,MI)就是互聯(lián)網(wǎng)上一種頗受歡迎的新業(yè)務(wù)。所謂即時(shí)消息就是為用戶提供了一種方便快捷的通過Internet與朋友交流的方式,通過它人們可以在線交談、互傳文件、語音對(duì)話及進(jìn)行視頻會(huì)議,甚至用手機(jī)雙向交流。未來即時(shí)消息的功能還會(huì)包括股票交易、在線購物、企業(yè)采購與調(diào)撥等電子商務(wù)運(yùn)作。即時(shí)消息在發(fā)展初期更多地以其娛樂性引起了人們的關(guān)注,而現(xiàn)在其快速增多的企業(yè)用戶表明這一技術(shù)已經(jīng)被開始融入到現(xiàn)代商務(wù)活動(dòng)中。即時(shí)消息傳遞的一個(gè)特點(diǎn)就是方便快捷,非常適用于短消息的傳送,另一個(gè)優(yōu)點(diǎn)就是安全可靠,保護(hù)隱私和機(jī)密,可以防止不需要的信息進(jìn)入,保護(hù)自己不被打擾。
目前即時(shí)消息發(fā)展存在的最突出問題就是相關(guān)通信協(xié)議和標(biāo)準(zhǔn)的不統(tǒng)一,即各個(gè)即時(shí)消息軟件由于采用不同的語言和協(xié)議標(biāo)準(zhǔn)而無法相互通信。雖然到目前為止還沒有完全統(tǒng)一的標(biāo)準(zhǔn)協(xié)議,但作為一種基于IP技術(shù)的通信基礎(chǔ)軟件,即時(shí)消息最終成為開放式的在線通信工具肯定是大勢所趨。即時(shí)消息已經(jīng)成為語音及文本在線實(shí)時(shí)通信的主要技術(shù),它必將成為未來移動(dòng)商務(wù)、在線協(xié)作及Internet應(yīng)用的核心,同時(shí)也將繼承IP技術(shù)的開放風(fēng)格,扮演比電子郵件更為重要的角色。
P2P(Peer-to-Peer)對(duì)等互聯(lián)或點(diǎn)對(duì)點(diǎn)技術(shù)。P2P技術(shù)可以讓用戶直接連接到其他用戶的計(jì)算機(jī),進(jìn)行文件共享與交換,同時(shí)P2P在深度搜索、分布計(jì)算、協(xié)同工作等方面也大有用途。P2P是一種用于不同PC用戶之間,不經(jīng)過中繼設(shè)備直接交換數(shù)據(jù)或服務(wù)的技術(shù),它允許Internet用戶直接使用對(duì)方的文件。每個(gè)人可以直接連接到其他用戶的計(jì)算機(jī),并進(jìn)行文件交換,而不需要連接到服務(wù)器上再進(jìn)行瀏覽與下載。
純點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò)沒有客戶端或服務(wù)器的概念,只有平等的同級(jí)節(jié)點(diǎn),同時(shí)對(duì)網(wǎng)絡(luò)上的其它節(jié)點(diǎn)充當(dāng)客戶端和服務(wù)器。這種網(wǎng)絡(luò)設(shè)計(jì)模型不同于客戶端-服務(wù)器模型,在客戶端-服務(wù)器模型中通信通常來往于一個(gè)中央服務(wù)器。目前Internet的存儲(chǔ)模式是“內(nèi)容位于中心”,而P2P技術(shù)的運(yùn)用將使Internet上的內(nèi)容向邊緣移動(dòng)。這將帶來以下改變:首先,客戶不再需要將文件上傳到服務(wù)器,而只需要使用P2P與其他計(jì)算機(jī)進(jìn)行共享;其次,使用P2P技術(shù)的計(jì)算機(jī)不需要固定的IP地址和永久的Internet連接,這使得占有極大比例的撥號(hào)上網(wǎng)用戶也可以享受P2P帶來的變革。基于此,我們采用C#作為開發(fā)工具,采用P2P技術(shù)開發(fā)了一個(gè)即時(shí)消息傳遞軟件。
C#作為微軟.Net戰(zhàn)略的重要組成部分,其對(duì)網(wǎng)絡(luò)編程提供了很好的支持和優(yōu)化。本文實(shí)時(shí)消息傳遞軟件的設(shè)計(jì),很直觀地給出了P2P(點(diǎn)對(duì)點(diǎn))編程以及套接口編程的基本知識(shí)和概念。它是建立在TcpListener以及TcpClient這兩個(gè)類基礎(chǔ)上的,軟件中同時(shí)采用了多線程技術(shù)和P2P技術(shù)重返“非中心化”的基本原則。因此采用這個(gè)軟件可以在網(wǎng)絡(luò)中發(fā)送、接收消息,任何一臺(tái)計(jì)算機(jī)既可以作為服務(wù)器端,又可以作為客戶端。
參照ICQ、OICQ等聊天工具,系統(tǒng)設(shè)計(jì)時(shí)可以將程序的主界面布置成和常見聊天工具的消息發(fā)送對(duì)話框類似的布局。不過由于程序僅有一個(gè)主界面,所以還要添加一些諸如“開始監(jiān)聽”、“停止監(jiān)聽”等控制按鈕。同時(shí),程序是支持昵稱顯示的。于是,按照這個(gè)思路來布置程序的主界面。首先,往主界面上拖放如下一些控件:兩個(gè)Label控件、三個(gè)Button控件、三個(gè)TextBox控件、一個(gè)RichTextBox控件以及一個(gè)StatusBar控件。系統(tǒng)主界面如圖1所示。
由于該程序用到了許多網(wǎng)絡(luò)編程所需的對(duì)象以及輸入輸出對(duì)象,又運(yùn)用了多線程編程機(jī)制,所以在程序的開始處需要添加如下一些名字空間:
using System.IO;
using System.Net.Sockets;
using System.Threading;
程序運(yùn)行時(shí),用戶首先單擊“開始監(jiān)聽”按鈕,啟動(dòng)監(jiān)聽程序,系統(tǒng)進(jìn)入監(jiān)聽狀態(tài),狀態(tài)欄有相應(yīng)的顯示。這樣,本機(jī)就相當(dāng)于“服務(wù)器/客戶機(jī)”模式中的服務(wù)器了,其他計(jì)算機(jī)通過IP地址連接到本機(jī),并且可以向本機(jī)發(fā)送消息。C#對(duì)網(wǎng)絡(luò)編程有良好的支持性能,所以程序員的工作量是比較小的。由于該軟件采用P2P模式,所以只要另一臺(tái)計(jì)算機(jī)的用戶也按下"開始監(jiān)聽"按鈕,那臺(tái)計(jì)算機(jī)也成了對(duì)應(yīng)計(jì)算機(jī)的服務(wù)器了。此時(shí)就可以實(shí)現(xiàn)消息互發(fā)功能,在該模式下真正的服務(wù)器是不存在的,每臺(tái)計(jì)算機(jī)都是服務(wù)器,同時(shí)每臺(tái)計(jì)算機(jī)也是客戶機(jī),這就體現(xiàn)了P2P技術(shù)的"非中心化"原則。
圖1 系統(tǒng)主界面
系統(tǒng)中使用Listen()函數(shù)來監(jiān)聽消息,通過Send()函數(shù)來發(fā)送即時(shí)信息。系統(tǒng)中實(shí)現(xiàn)監(jiān)聽的核心程序代碼如下。
函數(shù)的主體是一個(gè)try-catch語句,try部分又是一個(gè)while循環(huán),這表示只要用戶不按"停止監(jiān)聽"按鈕,程序就會(huì)一直處于監(jiān)聽狀態(tài)。監(jiān)聽的端口是3280,這個(gè)端口是可以自己定義的,只要不跟常用的端口混淆就行了。一旦程序接收到遠(yuǎn)程計(jì)算機(jī)的一條消息,就將該消息添加到消息顯示框中(消息顯示框就是那個(gè)RichTextBox控件)。函數(shù)的catch部分是捕捉異常用的,如用戶之間設(shè)置了防火墻,就不能彼此通訊了,或是對(duì)方已經(jīng)停止監(jiān)聽了,那當(dāng)然就不能向它發(fā)送消息了。在系統(tǒng)中通過函數(shù)Send()實(shí)現(xiàn)程序發(fā)送即時(shí)消息的功能,核心代碼如下:
該函數(shù)的主體部分也是一個(gè)try-catch語句,它先根據(jù)用戶的輸入,建立一個(gè)和遠(yuǎn)程計(jì)算機(jī)的連接,注意其端口也為3280,而且必須是3280,這是為了和接收方端口保持一致,這樣對(duì)方才能收到這里發(fā)送的消息。接著,函數(shù)根據(jù)用戶在消息輸入框中的內(nèi)容以及用戶的昵稱向遠(yuǎn)程計(jì)算機(jī)發(fā)送消息。這樣,只要網(wǎng)絡(luò)無故障、遠(yuǎn)程計(jì)算機(jī)已經(jīng)處于監(jiān)聽狀態(tài),它就能接收到這里發(fā)送的消息了。當(dāng)然,這里處于監(jiān)聽狀態(tài)了,遠(yuǎn)程的計(jì)算機(jī)也可以自如地往這里發(fā)消息。函數(shù)的catch部分也是用于捕捉一些異常的。
程序運(yùn)行如圖2所示。
圖2 軟件運(yùn)行效果圖
在該軟件中還可以添加消息存盤與消息上傳功能,可以將即時(shí)消息上傳到指定的郵箱,同時(shí)還可以添加軟件背景修改等個(gè)性設(shè)計(jì),通過不斷的修改與完善,一個(gè)功能強(qiáng)大的即時(shí)消息軟件不僅可以在局域網(wǎng)內(nèi)運(yùn)行,同樣可以在互聯(lián)網(wǎng)上運(yùn)行。
利用P2P技術(shù)的基本特性不但可以實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)通信,同時(shí)利用P2P技術(shù)與多線程技術(shù)相結(jié)合,我們還可開發(fā)出功能強(qiáng)大的能穿過防火墻進(jìn)行通訊的軟件程序。在即時(shí)消息系統(tǒng)的發(fā)展過程中,如何保障系統(tǒng)安全、為用戶提供可靠服務(wù)同樣重要。一個(gè)即時(shí)消息系統(tǒng)可能會(huì)保存數(shù)億用戶的個(gè)人信息,如何保證這些信息的安全將是一個(gè)長期課題。即時(shí)消息系統(tǒng)作為一種服務(wù)方式,如果能夠真正與Web服務(wù)緊密結(jié)合,必將獲得更大的市場價(jià)值。加強(qiáng)應(yīng)用軟件與網(wǎng)站平臺(tái)的融合,實(shí)現(xiàn)資源的優(yōu)勢互補(bǔ)和服務(wù)內(nèi)容的整合,通過交替推出新的應(yīng)用軟件和完善服務(wù)內(nèi)容的方式,擴(kuò)大網(wǎng)站的影響力,并同時(shí)獲得更多的應(yīng)用軟件用戶。未來基于P2P和多線程的“Web+即時(shí)消息系統(tǒng)”將是即時(shí)消息傳遞軟件發(fā)展的重要趨勢。
[1]李銀國,李萍,蔣建春.基于OSEK COM規(guī)范的消息傳輸機(jī)制優(yōu)化[J].計(jì)算機(jī)工程,2008,34(17):257 -259.
[2]孫東,朱丹.網(wǎng)間進(jìn)程同步與實(shí)時(shí)應(yīng)用[J].電訊技術(shù),2007,47(2):202 -205.