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クラス名)
また、この際バッチファイルなどを作っておくのも便利です