P2P Chat Program Using JXTA

Download Report

Transcript P2P Chat Program Using JXTA

P2P Chat Program Using JXTA
情報科学部ディジタルメディア学科
01k1024 諸星 宏行
P2Pとは


パソコン、PDA、携帯電話、ワークステーションな
どの各デバイス(ピアという)同士が同時に通信
しあう仕組みのこと
中央で一括処理するサーバなど
を必要とせず、ピア同士でさまざ
まなリソースやサービスを提供し
あうことが出来る
通信形態

ハイブリッド型
サーバが存在するP2P。クライアント側でリソー
スを保持し、サーバにリソースの所在を問い合
わせる。リソースの提供はクライアント間で行う。

ピュア型
クライアント、サーバといった役割が存在せず、
ピアのみで動作する
P2Pの利用

Distributed Processing
大規模なデータ処理を分割し、ネットワーク に散
在するコンピュータで処理する

Collaboration
複数の利用者の協調作業を支援する

Storage
ファイル交換やハードディスクの分散
JXTAの概要

P2Pを実現するためにSunが発表したプロトコル

コンセプト

相互運用性(Interoperability)
JXTAのピアは相互通信のためのさまざまなサービスを提供する

プラットフォーム非依存(Platform independence)
OS、プログラミング言語、通信プロトコルなどに依存しない

利用性(Ubiquity)
コンピュータ、PDA、携帯電話、サーバ、家電製品などの各デバ
イスで実装が可能
JXTAの構成要素(1)

Peer・・・ネットワークを構成する最小単位




Simple Peer・・・単一のエンドユーザのために働くピア
Rendezvous Peer・・・他のピアやピアのリソースを発見する
ためのネットワーク上の場所を提供するピア
Relay Peer・・・隔離されたプライベート内のピアとグローバ
ル内のピアとの通信メカニズムを提供するピア
Peer Group・・・ピア群が集まって構成される
ピア群にサービスを提供するグループのことで、オープンなグループから
セキュアなグループまで作成可
JXTAの構成要素(2)

Service・・・ピアが利用する可能性のある基本機能


PeerService・・・ピアが提供するサービス
PeerGroupService・・・ピアグループが提供するサービス

Pipe・・・ピアがお互いに通信するための伝送路

Advertisement・・・ピア、パイプ、サービスなどさまざまな
リソースを表わすXML文書
公開されているアドバタイズメントからどのリソースが利用できるかと
いった情報を知ることができる
Chat Application (JXTA)

Peer Discovery Protocol



自身のリソースが記されているAdvertisementを公開する
Advertisementを取得する
Peer Binding Protocol

メッセージをやり取りする伝送路の確立
パイプアドバタイズ
メントの作成と公開
アドバタイズメントの検索・発見
レスポンスメッセージからアドバタイズメントの取得
アドバタイズメントから
In/Outputパイプを作成
パイプを通じて
メッセージのやりとり
アドバタイズメントから
In/Outputパイプを作成
Chat Application (JXTA)

Advertisementの作成と公開
discSvc = netPeerGroup.getDiscoveryService();
pipeAdv = (PipeAdvertisement)AdvertisementFactory.newAdvertisement(
PipeAdvertisement.getAdvertisementType() );
pipeAdv.setName( PIPE_NAME );
// パイプ名のセット
pipeAdv.setPipeID( IDFactory.newPipeID( netPeerGroup.getPeerGroupID() ) );
// ID
pipeAdv.setType( PipeService.PropagateType );
// パイプ種別をセット
discSvc.Publish( pipeAdv, DiscoveryService.ADV );
// ローカルに公開
discSvc.remotePublish( pipeAdv, DiscoveryService.ADV );
// リモートに公開

Input/OutputPipeの作成
inPipe = pipeSvc.createInputPipe( pipeAdv, this );
// Inputパイプ生成
outPipe = pipeSvc.createOutputPipe( pipeAdv, TIME_TO_WAIT ); // Outputパイプ生成

Advertisementの検索
discSvc.getRemoteAdvertisements(null, DiscoveryService.ADV, null, null, 5, this);
Chat Application (JXTA)

ResponseからAdvertisementを取得する
public void discoveryEvent( DiscoveryEvent ev ){ // Advertisement発見時に呼び出される
DiscoveryResponseMsg resMsg = ev.getResponse();
if( pipeAdv.getName().equals( PIPE_NAME ) &&
pipeAdv.getType().compareTo( PipeService.PropagateType ) == 0 )
createPipes( pipeAdv );
// Input, Outputパイプ作成メソッド

Messageを送信する
Message msg = pipeSvc.createMessage();
MessageElement = msg.newMessageElement( MSG_TAG_SENDER,
// 送信者名の追加
new MimeMediaType( “text/plain” ),
new ByteArrayInputStream( sender.getBytes() ) );
msg.addElement( messageElement );
// この後、メッセージ本体も同様に追加する
outputPipe.send( msg );

Messageを取得する
public void pipeMsgEvent( PipeMsgEvent evt ){
Message message = evt.getMessage();
// メッセージ受信時に呼び出される
Chat Application(Server-Client)
Server
Client
メッセージはサーバを介して送られる
input.readUTF()
output.writeUTF(
)
・・・・・・・
・
output.writeUTF()
input.readUTF()
Client
input.readUTF(
output.writeUTF(
)
・・・・・・・)
output.writeUTF(
・
input.readUTF(
)
)
Server側

ServerSocketを生成し、Clientから要求を待つポートを設定する
ServerSocket s = new ServerSocket( port, queueLength );

クライアントからの接続を待つ
Soket connection = s.accept();

ストリームソケットに入力、出力ストリームを連結する
DataInputStream input = new DataInputStream( connection.getInputStream() );
DataOutputStream output = new DataOutputStream( connection.getOutputStream() );

コネクションを閉じる
Connection.close();
Chat Application(Server-Client)
Client側

Serverに接続するストリームソケットを作成する
Socket connection = new Socket( serverAddress, port );

ストリームソケットに入力、出力ストリームを連結する
DataInputStream input = new DataInputStream( connection.getInputStream() );
DataOutputStream output = new DataOutputStream( connection.getOutputStream() );

コネクションを閉じる
Connection.close();
参考文献名: C Magazine/2003年01号/P37~74
JXTAのすべて(日経BP)
Java How to Program Vol.2(ピアソン)
Projext JXTAのインストール

Project JXTA Demosをダウンロード



Project JXTA Demosをインストール


http://www.jxta.org/ にアクセスする
一番上にある「Download Project JXTA Demos Now! myJxta Demo App and
Latest Shell」を選択し、Windowsのincludes Java_VMをダウンロード
ダウンロードしたJXTAInst_VM.exeを選択し、全てデフォルトでインストー
ルする
JXTA Demoを動かしてみる





スタート -> プログラム -> Jxta -> JXTA Shellを選択
初回起動時に設定を必要とするのでPeerName, UserName, Passwordを入力する
Relay Setting でUse a Relayをチェックする
Download relay and rendezvous lists から利用できるランデブーピアのIPをダウン
ロードする
OKを押して起動
Projext JXTAのインストール

Programmingをする
http://www.jxta.org/project/www/Tutorials.html からProgrammers Guideをダウン
ロードしてみてください。
また、プログラミングにはクラスパスの再設定が必要です。
java -classpath C:\Program Files\JXTA_Demo\lib\jxta.jar;C:\Program
Files\JXTA_Demo\lib\log4j.jar;C:\Program
Files\JXTA_Demo\lib\beepcore.jar;C:\Program
Files\JXTA_Demo\lib\jxtasecurity.jar;C:\Program
Files\JXTA_Demo\lib\cryptix-asn1.jar;C:\Program
Files\JXTA_Demo\lib\cryptix32.jar;C:\Program
Files\JXTA_Demo\lib\jxtaptls.jar;C:\Program
Files\JXTA_Demo\lib\minimalBC.jar; (実行Javaクラス名)
また、この際バッチファイルなどを作っておくのも便利です