2011年7月1日金曜日

MacでAppletプログラムを組む(TCPサーバーを書く)

始めに注意。今回の記事には、自分で署名したappletをつけています。
悪さをするプログラムを書いていませんが、ご注意ください。


先日からやっているUDPホールパンチングによるNAT越えのP2Pですが、Javaアプリケーションで書いてもいいのですが、それだといまいち使いにくい・・・

ならJavaAppletで書いてしまってダウンロードしなくてもできるようにしてしまえ・・・
というわけでJavaAppletにとりいそぎサーバープログラムを書いてみたところ、つまりまくったので、MacのEclipseでAppletを組む人向けの記事をかいておこうとおもいます。

まず、1つ目、できあがったappletのブラウザ表示から・・・簡単なhtmlを書いて起動しても対象クラスがみつからないというエラーが大量にでました。
<applet archive="appletTest.jar" code="com.ttProject.appletTest.AppletEntry" width...> </applet>
こんなタグを書いているのにどうしても動作しない。
ブラウザのURLの部分をみてみたら、file://localhost/User/xxxxx
というアドレスになっていました。
これ実はfile:///User/xxxxxでないと動作しません。なぜlocalhostがはいったのかは不明。

続いて2つ目、サーバーとして動作させるため、サンドボックスから抜けないと別のところからの通信をうけとることができません。
そこで証明書をつくるのですが、Mac上で証明書をつくろうとすると文字化けして、どうしてもうまく動作させることができませんでした。
なので、サクラサーバーに借りているVPS上にいったんデータを移してからCentOS上で署名をするハメに・・・

最後に3つ目、署名もできたので、いざ実行させようとしてもどうしても動作しません。
原因はなんとeclipseのappletのビジュアルエディタでした。
このビジュアルエディタ、動作させるために、裏でappletを起動しているようです。今回はサーバープログラムを書いたのでポートをlistenするのですが、裏でうごいているappletが先にポートをとってしまうので動作しないというとんでもない事態になりました。
なので、それらのプログラムを殺してから実行しないと動作しないということがわかりました。
そしてつくったアプレットが以下
今回のアプレットはサーバーとして、8080ポートを監視します。
この動作はサンドボックス外の動作なので、署名付きのアプレットとなっております。
万一のことがおこりましても、このサイトでは責任を一切負いませんのでお気をつけ下さい。


アプレットが起動したら、適当なコンソールでnetstatで8080番をListenしていることと、telnet localhost 8080でこのアプレットに接続でき、適当な入力を送ると、アプレット上に表示されると思います。

これで一応サーバー動作はできることがわかったので、今度はUDP通信のテストを実行して、P2Pチャットでもつくろうかな。

0 件のコメント:

コメントを投稿