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