Presentation is loading. Please wait.

Presentation is loading. Please wait.

P2P Chat Program Using JXTA

Similar presentations


Presentation on theme: "P2P Chat Program Using JXTA"— Presentation transcript:

1 P2P Chat Program Using JXTA
情報科学部ディジタルメディア学科 01k1024 諸星 宏行

2 P2Pとは パソコン、PDA、携帯電話、ワークステーションなどの各デバイス(ピアという)同士が同時に通信しあう仕組みのこと
中央で一括処理するサーバなどを必要とせず、ピア同士でさまざまなリソースやサービスを提供しあうことが出来る

3 通信形態 ハイブリッド型 サーバが存在するP2P。クライアント側でリソースを保持し、サーバにリソースの所在を問い合わせる。リソースの提供はクライアント間で行う。 ピュア型 クライアント、サーバといった役割が存在せず、ピアのみで動作する

4 P2Pの利用 Distributed Processing 大規模なデータ処理を分割し、ネットワーク に散在するコンピュータで処理する
Collaboration 複数の利用者の協調作業を支援する Storage ファイル交換やハードディスクの分散

5 JXTAの概要 P2Pを実現するためにSunが発表したプロトコル コンセプト 相互運用性(Interoperability)
プラットフォーム非依存(Platform independence) OS、プログラミング言語、通信プロトコルなどに依存しない 利用性(Ubiquity) コンピュータ、PDA、携帯電話、サーバ、家電製品などの各デバイスで実装が可能

6 JXTAの構成要素(1) Peer・・・ネットワークを構成する最小単位 Peer Group・・・ピア群が集まって構成される
Simple Peer・・・単一のエンドユーザのために働くピア Rendezvous Peer・・・他のピアやピアのリソースを発見するためのネットワーク上の場所を提供するピア Relay Peer・・・隔離されたプライベート内のピアとグローバル内のピアとの通信メカニズムを提供するピア Peer Group・・・ピア群が集まって構成される ピア群にサービスを提供するグループのことで、オープンなグループからセキュアなグループまで作成可

7 JXTAの構成要素(2) Service・・・ピアが利用する可能性のある基本機能 Pipe・・・ピアがお互いに通信するための伝送路
PeerService・・・ピアが提供するサービス PeerGroupService・・・ピアグループが提供するサービス Pipe・・・ピアがお互いに通信するための伝送路 Advertisement・・・ピア、パイプ、サービスなどさまざまなリソースを表わすXML文書 公開されているアドバタイズメントからどのリソースが利用できるかといった情報を知ることができる

8 Chat Application (JXTA)
Peer Discovery Protocol 自身のリソースが記されているAdvertisementを公開する Advertisementを取得する Peer Binding Protocol メッセージをやり取りする伝送路の確立                                     パイプアドバタイズメントの作成と公開 アドバタイズメントの検索・発見 レスポンスメッセージからアドバタイズメントの取得 アドバタイズメントから In/Outputパイプを作成 アドバタイズメントから In/Outputパイプを作成  パイプを通じて メッセージのやりとり

9 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);

10 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();

11 Chat Application(Server-Client)
メッセージはサーバを介して送られる input.readUTF() output.writeUTF() input.readUTF() output.writeUTF() ・・・・・・・・ ・・・・・・・・ output.writeUTF() input.readUTF() 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();

12 Chat Application(Server-Client)
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(ピアソン)

13 Projext JXTAのインストール Project JXTA Demosをダウンロード
にアクセスする 一番上にある「Download Project JXTA Demos Now! myJxta Demo App and Latest Shell」を選択し、Windowsのincludes Java_VMをダウンロード Project JXTA Demosをインストール ダウンロードしたJXTAInst_VM.exeを選択し、全てデフォルトでインストールする JXTA Demoを動かしてみる スタート -> プログラム -> Jxta -> JXTA Shellを選択 初回起動時に設定を必要とするのでPeerName, UserName, Passwordを入力する Relay Setting でUse a Relayをチェックする Download relay and rendezvous lists から利用できるランデブーピアのIPをダウンロードする OKを押して起動

14 Projext JXTAのインストール Programmingをする
から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クラス名) また、この際バッチファイルなどを作っておくのも便利です


Download ppt "P2P Chat Program Using JXTA"

Similar presentations


Ads by Google