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

圖1 系統(tǒng)主界面
系統(tǒng)中使用Listen()函數(shù)來監(jiān)聽消息,通過Send()函數(shù)來發(fā)送即時信息。系統(tǒng)中實現(xiàn)監(jiān)聽的核心程序代碼如下。


函數(shù)的主體是一個try-catch語句,try部分又是一個while循環(huán),這表示只要用戶不按"停止監(jiān)聽"按鈕,程序就會一直處于監(jiān)聽狀態(tài)。監(jiān)聽的端口是3280,這個端口是可以自己定義的,只要不跟常用的端口混淆就行了。一旦程序接收到遠程計算機的一條消息,就將該消息添加到消息顯示框中(消息顯示框就是那個RichTextBox控件)。函數(shù)的catch部分是捕捉異常用的,如用戶之間設(shè)置了防火墻,就不能彼此通訊了,或是對方已經(jīng)停止監(jiān)聽了,那當然就不能向它發(fā)送消息了。在系統(tǒng)中通過函數(shù)Send()實現(xiàn)程序發(fā)送即時消息的功能,核心代碼如下:

該函數(shù)的主體部分也是一個try-catch語句,它先根據(jù)用戶的輸入,建立一個和遠程計算機的連接,注意其端口也為3280,而且必須是3280,這是為了和接收方端口保持一致,這樣對方才能收到這里發(fā)送的消息。接著,函數(shù)根據(jù)用戶在消息輸入框中的內(nèi)容以及用戶的昵稱向遠程計算機發(fā)送消息。這樣,只要網(wǎng)絡(luò)無故障、遠程計算機已經(jīng)處于監(jiān)聽狀態(tài),它就能接收到這里發(fā)送的消息了。當然,這里處于監(jiān)聽狀態(tài)了,遠程的計算機也可以自如地往這里發(fā)消息。函數(shù)的catch部分也是用于捕捉一些異常的。
程序運行如圖2所示。

圖2 軟件運行效果圖
在該軟件中還可以添加消息存盤與消息上傳功能,可以將即時消息上傳到指定的郵箱,同時還可以添加軟件背景修改等個性設(shè)計,通過不斷的修改與完善,一個功能強大的即時消息軟件不僅可以在局域網(wǎng)內(nèi)運行,同樣可以在互聯(lián)網(wǎng)上運行。
利用P2P技術(shù)的基本特性不但可以實現(xiàn)點對點通信,同時利用P2P技術(shù)與多線程技術(shù)相結(jié)合,我們還可開發(fā)出功能強大的能穿過防火墻進行通訊的軟件程序。在即時消息系統(tǒng)的發(fā)展過程中,如何保障系統(tǒng)安全、為用戶提供可靠服務(wù)同樣重要。一個即時消息系統(tǒng)可能會保存數(shù)億用戶的個人信息,如何保證這些信息的安全將是一個長期課題。即時消息系統(tǒng)作為一種服務(wù)方式,如果能夠真正與Web服務(wù)緊密結(jié)合,必將獲得更大的市場價值。加強應(yīng)用軟件與網(wǎng)站平臺的融合,實現(xiàn)資源的優(yōu)勢互補和服務(wù)內(nèi)容的整合,通過交替推出新的應(yīng)用軟件和完善服務(wù)內(nèi)容的方式,擴大網(wǎng)站的影響力,并同時獲得更多的應(yīng)用軟件用戶。未來基于P2P和多線程的“Web+即時消息系統(tǒng)”將是即時消息傳遞軟件發(fā)展的重要趨勢。
[1]李銀國,李萍,蔣建春.基于OSEK COM規(guī)范的消息傳輸機制優(yōu)化[J].計算機工程,2008,34(17):257 -259.
[2]孫東,朱丹.網(wǎng)間進程同步與實時應(yīng)用[J].電訊技術(shù),2007,47(2):202 -205.