999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Jxta的P2P即時(shí)通信軟件的Java實(shí)現(xiàn)

2010-04-12 00:00:00
現(xiàn)代電子技術(shù) 2010年14期

摘 要:本軟件的目的是要求解決傳統(tǒng)的基于C/S模式的即時(shí)通信軟件過分依賴于中心節(jié)點(diǎn)的性能的問題,基于P2P模式的即時(shí)通信軟件可以有效地解決這些問題。本軟件采用Java的基于P2P的Jxta網(wǎng)絡(luò)框架,軟件用IMbean鏈接GUI圖形界面的開發(fā)方式,并實(shí)現(xiàn)了多個(gè)Peer節(jié)點(diǎn)之間的信息收發(fā)。

關(guān)鍵詞:即時(shí)通信軟件; P2P模式; Jxta; Java

中圖分類號:TN87+; TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1004-373X(2010)14-0136-04

Java Realization of P2P Instant Messaging Software Based on Jxta

QING Lin

(Hunan Normal University, Changsha 410006,China)

Abstract: The purpose of this software is to figure out the problem that the common instant message software mostly depended on the ability of the centre pole. The software is based on the frame of JXTA of the JAVA, and uses the development method of linking GUI with IMbean, achieves the posting of messages between every Peer.

Keywords: instant messaging software; P2P; Jxta; Java

P2P技術(shù)是目前非常流行的一種分布式計(jì)算技術(shù),P2P網(wǎng)絡(luò)的基礎(chǔ)單位是對等點(diǎn),每個(gè)對等點(diǎn)之間能夠互訪。SUN公司針對P2P技術(shù)的特點(diǎn)提出了自己關(guān)于P2P網(wǎng)絡(luò)的Jxta研究項(xiàng)目,本文設(shè)計(jì)的即時(shí)通信軟件便是基于該技術(shù)來開發(fā)的。

1 軟件實(shí)現(xiàn)

1.1 系統(tǒng)架構(gòu)

Jxta P2P applications即本文所設(shè)計(jì)的軟件是建立在JavaBean上的,JavaBean是一種類,它針對特定的用途封裝了屬性和方法[1],實(shí)現(xiàn)特定的用途,而下面的JAL是Java的抽象層,它直接隔開了Jxta的平臺,為上層的程序管理Jxta的對等體,廣告,管道以及其他各種底層的實(shí)現(xiàn)和細(xì)節(jié)[2]。

1.2 總體設(shè)計(jì)步驟和方法

總體設(shè)計(jì)步驟和方法[3]如下:

(1) 設(shè)計(jì)JAL;

(2) 設(shè)計(jì)本軟件的中的JavaBean,即IMbean;

(3) 創(chuàng)建應(yīng)用程序VSJChat的GUI圖形界面;

(4) 鏈接IMbean和應(yīng)用程序GUI,以實(shí)現(xiàn)功能[4]。

1.3 設(shè)計(jì)JAL的Peer接口

JAL實(shí)際上也是API即引用程序接口,實(shí)現(xiàn)以下功能:

(1) 發(fā)現(xiàn)Peer同時(shí)能被發(fā)現(xiàn);

(2) 搜索其他Peer和Peer群;

(3) 創(chuàng)建和管理Peer群;

(4) 和其他Peer的交流;

(5) 獲得其他Peer或者Peer群的信息[5]。

Peer接口設(shè)計(jì)程序如下所示:

public interface Peer{ //開始

public void boot(String name)

throws Exception;

public void boot(String name,

String group)throws Exceptio

//申明可用性

public void publish()

throws Exception; //Peer信息

public String getName();

public String[]getPeers()

throws Exception; //發(fā)送和接收信息

public boolean sendMessage(

String name,Message msg)

throws Exception;

public boolean broadcast

(Messagemsg)throws Exception

public Message receiveMessage()

throws Exception; //信息處理

public Message newMessage();

public void pushObject(Message m

String tag,Object obj)

throws Exception;

public Object popObject(

Message msg,String tag)

throws Exception; //群處理

public void createGroup(

String name)throws Exceptio

public void joinGroup(String name

throws Exception;

public String[]getGroups()

throws Exception;

public void createAndOrJoinGroup

String name)throws Exceptio

public void leaveGroup(String nam

throws Exception;

//信息效用

public boolean

searchGroupWithName(String name)

throws Exceptio

public boolean

searchPeerWithName(String n

throws Exception;

public void displayPeers()

throws Exception;

public void displayGroups()

throws Exception;

public void displayServices()

throws Exception;

public String getPeerStatistics();

}

1.4 IMbean的設(shè)計(jì)

IMBean是在JAL基礎(chǔ)上開發(fā)的一個(gè)應(yīng)用JavaBean。它的作用是:處理所有的Jxta細(xì)節(jié)問題(包括初始化Peer,異常處理)[6];處理輸入信息,傳輸?shù)絍SJChat;處理輸出信息,通過Jxta網(wǎng)絡(luò)發(fā)送。

1.5 應(yīng)用程序VSJChat的GUI圖形界面的創(chuàng)建

利用圖形編輯器創(chuàng)建GUI圖形界面。使用的開發(fā)工具是NetBeans,利用其中的圖形編輯器創(chuàng)建。層結(jié)構(gòu)和每個(gè)GUI組件的類型,各個(gè)按鈕的名字將顯示在圖像界面中。

GUI產(chǎn)生代碼程序如下所示:

Public class VSJChat extends Javax.swing.JFrame{

/**產(chǎn)生新模板VSJchat*/

public VSJChat(){

...

}

private void initComponents(){

chatBean1=new

org.Jxta.ezel.beans.imbean.IMBean();

jPanel1=new Javax.swing.JPanel();

jTextField1=new Javax.swing.JTextField();

jButton1=new Javax.swing.JButton();

jPanel2=new Javax.swing.JPanel();

jTextArea1=new Javax.swing.JTextArea();

setTitle(\"VSJ P2P World Wide Messaging-100%Java Edition\");

addWindowListener(new

Java.awt.event.WindowAdapter(){

public void windowClosing

(Java.awt.event.WindowEvent evt){

exitForm(evt);

}

});

jPanel1.setLayout(new Java.awt.BorderLayo

jTextField1.setColumns(40);

jTextField1.setFont(new Java.awt.Font(

\"Dialog\",0,10));

jPanel1.add(jTextField1,

Java.awt.BorderLayout.CENTER);

jButton1.setText(\"Send Message\");

jPanel1.add(jButton1,Java.awt.BorderLayou

getContentPane().add(jPanel1,

Java.awt.BorderLayout.SOUTH);

jPanel2.setLayout(new Java.awt.BorderLayo

jTextArea1.setEditable(1);

jTextArea1.setFont(new

Java.awt.Font(\"Dialog\",2,12));

jTextArea1.setFocusable(1);

jTextArea1.setMinimumSize(new

Java.awt.Dimension(500,400));

1.6 建立IMBean和應(yīng)用程序VSJChat的鏈接

1.6.1 導(dǎo)入IMBean

在IDE開發(fā)工具中加入代碼來導(dǎo)入IMBean,修改VSJChat產(chǎn)生構(gòu)造器來完成的。在源程序中創(chuàng)建了一個(gè)特別的構(gòu)造器,它用2個(gè)字符串作為參數(shù),并為一個(gè)私有方法localInit()構(gòu)造出初始化代碼。用一個(gè)發(fā)送者或?qū)Φ葯C(jī)名字和一個(gè)群名調(diào)用initBean()方法將激活在特定的群中的關(guān)聯(lián)對等機(jī)名的Jxta平臺。使用IMBean可加入到存在的被提供用戶名的IM會(huì)話中。在localInit()方法中,可以設(shè)置其他可獲得的IMBean參數(shù),如alias和topic properties[7]。

程序:導(dǎo)入bean

public VSJChat(){

mySenderName=\"noname\";

myGroupName=\"netpeergroup\";

localInit();

}

public VSJChat(String peername,String groupname){

mySenderName=peername;

myGroupName=groupname;localInit();

}

private void localInit(){

initComponents();

try{

chatBean1.initBean(mySenderName,myGroupName);

}catch(Exception ex){

ex.printStackTrace();

}

chatBean1.setSenderName(mySenderName);

chatBean1.setAlias(\"NOALIAS\");

chatBean1.setTopic(\"ALL\");

jTextField1.requestFocus();

1.6.2 實(shí)現(xiàn)IMBean發(fā)信息的功能

在GUI圖形界面中把jBotton1的按紐命名為“Send Message”。運(yùn)用NetBeans3.5的GUI編輯器,選中jBotton1組件,選擇事件標(biāo)簽的屬性列,點(diǎn)擊為事件名“actionPerformed”的屬性名,再輸入事件處理器的名字“SendClick”。這將在VSJChat中自動(dòng)創(chuàng)建一個(gè)事件處理器方法。

產(chǎn)生事件監(jiān)聽者程序[8] 如下所示:

jButton1.addActionListener(new Java.awt.event.ActionListener(){

public void actionPerformed(Java.awt.event.ActionEvent evt)

SendClicked(evt);

}

);

SendClicked()方法也同時(shí)產(chǎn)生了。填充這個(gè)方法,通過IMbean來取得用戶輸入和發(fā)送的消息。

獲得用戶輸入和發(fā)送的信息程序如下所示:

private static final String CHAT_SEP=\">\";

private static final String CR=\"\\\\";

private static final String EMPTY_TEXT=\"\";

private StringBuffer curMsgs=new

StringBuffer(EMPTY_TEXT);

private void SendClicked(

Java.awt.event.ActionEvent evt){

try{String latestMsg=jTextField1.getText();

chatBean1.sendMessage(latestMsg);

curMsgs.append(mySenderName+

CHAT_SEP+latestMsg+CR);

jTextArea1.setText(curMsgs.toString());

jTextField1.setText(EMPTY_TEXT);

jTextField1.requestFocus();

}catch(Exception ex){

ex.printStackTrace();

} }

在使用者打完字時(shí)按下回車鍵來發(fā)送信息。這可以在處理jTextFieldv1組件的actionPerformed()事件中完成。再一次使用GUI編輯器,這次選擇jTextField1組件,調(diào)用TextFieldComplete()處理方法[9]。

程序:發(fā)送信息快捷方式

jTextField1.addActionListener(new

ava.awt.event.ActionListener(){

public void actionPerformed(

Java.awt.event.ActionEvent

evt){

TextFieldComplete(evt);

} });

然后可以填充TextFieldComplete()方法來簡單調(diào)用SendClick(),因?yàn)榛剀嚨韧邳c(diǎn)擊“Send Message”按紐。

發(fā)送信息程序如下所示:

private void TextFieldComplete(

Java.awt.event.ActionEvent evt){

SendClicked(evt);

})

1.6.3 實(shí)現(xiàn)IMBean接收信息功能

IMBean有2種接收信息的模式,事件處理和輪流檢測。因應(yīng)用程序不同,2種方法可以任選其一。本文用的是事件處理方式。可以在組件層級顯示中通過點(diǎn)擊IMBean組件,在屬性列表中選擇“event”標(biāo)簽,運(yùn)用IDE來加入1個(gè)對IMBean的MessageReceive事件的監(jiān)聽程序。這個(gè)事件處理器可稱為“messageHandler”。

IDE也為messageHandler()方法產(chǎn)生一個(gè)架構(gòu)代碼。這里,給找到接收的信息和刷新顯示在jTextArea中的信息填充邏輯語言[10]。

刷新顯示在jTextArea中的信息程序如下所示:

private void messageHandler(MessageReceivedEvent evt){

curMsgs.append(evt.getSender()+

CHAT_SEP+evt.getMessageText()

+CR);

jTextArea1.setText(

curMsgs.toString());

}

完成以上工作以后,VSJChat應(yīng)用程序的編寫就完成了。

1.7 實(shí)驗(yàn)結(jié)果

當(dāng)?shù)谝淮芜\(yùn)行VSJChat,Jxta GUI配置器會(huì)彈出,并要求設(shè)置配置參數(shù),在初始化配置后,這些配置將存儲在一個(gè).Jxta目錄中,以后重啟時(shí)將只為使用安全用戶名和密碼者提醒。按局域網(wǎng)上配置測試參數(shù)。首先,創(chuàng)建集合點(diǎn),這個(gè)可以用網(wǎng)上發(fā)布的目錄code/test/rdvnode中的runit.bat文件開始。仔細(xì)研究runit.bat文件,看到它實(shí)際上開始的是uk.co.vsj.Jxta2.wwm.RunRDV類,即:這個(gè)類的代碼創(chuàng)建一個(gè)Jxta群,把它作為一個(gè)群的集合點(diǎn)。現(xiàn)在開始第一個(gè)對等點(diǎn),即peer1,在code/test/peer1目錄下運(yùn)行runit,bat文件。繼續(xù)配置peer2,和peer1同樣設(shè)置。這個(gè)對等點(diǎn)可以通過code/test/peer2目錄下的runit.bat文件開始。運(yùn)行這2個(gè)Peer,運(yùn)用以上的命令,就可以用peer1和peer2運(yùn)行VSJChat了。雖然只運(yùn)行了2個(gè)peer,但按照上面的配置方法,只改變Peer的IP配置,在同一個(gè)VSJChat上運(yùn)行多少個(gè)Peer都是可以的。

2 結(jié) 語

本文著重介紹了如何實(shí)現(xiàn)了基于P2P網(wǎng)絡(luò)技術(shù)的即時(shí)通信軟件的對等體雙方互相收發(fā)信息。當(dāng)然P2P網(wǎng)絡(luò)時(shí)代的應(yīng)用還很多,今后本軟件將向著包含網(wǎng)絡(luò)存儲,分布式下載等更多的應(yīng)用功能的方向發(fā)展。

參考文獻(xiàn)

[1]吳先濤,吳承治.P2P技術(shù)及其演進(jìn)[J].現(xiàn)代傳輸,2008 (3):64-65.

[2]楊天路,劉宇宏,張文,等.P2P網(wǎng)絡(luò)技術(shù)原理與系統(tǒng)開發(fā)案例[M].北京:人民郵電出版社,2007.

[3]Scott Oaks,Bernard Traversat. Jxta技術(shù)手冊[M].北京:清華大學(xué)出版社,2004.

[4]宋雪昌.基于Jxta對等網(wǎng)絡(luò)的即時(shí)通信系統(tǒng)的研究與實(shí)現(xiàn)[D].蘇州:蘇州大學(xué),2005.

[5]周功業(yè),黎書生.新一代網(wǎng)絡(luò)計(jì)算模型:P2P及其Jxta體系結(jié)構(gòu)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用研究,2002(9):139-140.

[6]鄧杰文.P2P系統(tǒng)模型綜述[J].中國科技信息,2008(6): 116-117.

[7]吳國慶.對等網(wǎng)絡(luò)技術(shù)研究[J].計(jì)算機(jī)技術(shù)與發(fā)展,2008(7):100-101.

[8]許斌.Jxta-Java P2P網(wǎng)絡(luò)編程技術(shù)[M].北京:清華大學(xué)出版社,2003.

[9]Sun Microsystems Inc.. Project Jxta: an open innovative collaboration[ M] . [ S.l.] : SunMicrosystems Inc., 2001.

[10]李俊青.應(yīng)用Jxta實(shí)現(xiàn)P2P的方案研究[J].河北理工學(xué)院學(xué)報(bào),2003(4) :6-9.

主站蜘蛛池模板: 国产第一页免费浮力影院| 亚洲精品无码人妻无码| 国产精品第一区| 欧美国产视频| 制服无码网站| 2022国产91精品久久久久久| 国语少妇高潮| 狠狠色丁香婷婷综合| 在线观看国产小视频| 在线看片国产| 欧美啪啪网| 97超级碰碰碰碰精品| 天天操天天噜| 日韩国产欧美精品在线| 亚洲精品动漫| 伊人色综合久久天天| 久久人人97超碰人人澡爱香蕉| 国产激情无码一区二区APP| 欧美中日韩在线| 亚洲欧美不卡中文字幕| 日韩AV无码免费一二三区| 97精品伊人久久大香线蕉| 最新无码专区超级碰碰碰| 久久黄色视频影| 亚洲浓毛av| 国产在线观看第二页| av在线手机播放| 亚洲天堂精品视频| 久久亚洲日本不卡一区二区| 永久成人无码激情视频免费| 黑人巨大精品欧美一区二区区| 理论片一区| 国产成人啪视频一区二区三区| 国产精品国产三级国产专业不| 久久久久国产精品免费免费不卡| 在线国产毛片手机小视频| 中国成人在线视频| 午夜性爽视频男人的天堂| 国产尤物视频在线| 欧美亚洲国产日韩电影在线| 国产h视频在线观看视频| 国产91视频观看| 国产xxxxx免费视频| 国产麻豆永久视频| 日韩123欧美字幕| 日韩中文字幕亚洲无线码| 久久精品人人做人人综合试看| 女人18毛片久久| 91午夜福利在线观看| 欧美精品在线免费| 欧美性色综合网| 久久a毛片| 97在线公开视频| www.亚洲国产| 国产超碰在线观看| 欧美第一页在线| 91年精品国产福利线观看久久| 中文字幕不卡免费高清视频| 91九色国产porny| 国产成人区在线观看视频| 国产成人禁片在线观看| 91视频国产高清| 日本三级欧美三级| 亚洲浓毛av| 日韩无码真实干出血视频| 亚洲黄色成人| 亚洲天堂伊人| 亚洲乱码视频| 免费看一级毛片波多结衣| 国产亚洲精品在天天在线麻豆 | 国产视频一区二区在线观看 | 老色鬼欧美精品| 刘亦菲一区二区在线观看| 精品夜恋影院亚洲欧洲| 亚洲精品成人7777在线观看| 青青青国产视频手机| 国产成+人+综合+亚洲欧美| 天天躁日日躁狠狠躁中文字幕| 国产精品永久免费嫩草研究院| 天天综合色天天综合网| 在线观看国产小视频| 中文国产成人久久精品小说|