- PR -

JavaAppletのSocketの接続について質問です。

1
投稿者投稿内容
Nob
会議室デビュー日: 2007/12/19
投稿数: 5
投稿日時: 2007-12-19 18:06
皆さん初めまして。

JavaAppletのSocketの接続について質問です。

JavaAppletからホストではない別のサーバーに対してSocketの接続を試みた際に、
妙に時間がかかってしまう現象が出てしまい現在調査をしています。

EclipseやAppletビューワーでの単体テストでは接続に1秒かからないのですが、
Appletをホストに配置しブラウザで起動させると
接続に10秒ほど時間がかかってしまいます。これは何故なのでしょうか?
なおsocketの作成は以下のように行っております。

Socket socket;
socket = new Socket(Server,80);

お忙しい中恐縮ですが、ご教授よろしくお願いいたします。
ranco
大ベテラン
会議室デビュー日: 2007/11/02
投稿数: 112
投稿日時: 2007-12-19 20:49
きわめてプレーンでスタンダードなSocket通信が書かれているのであれば、Java側の問題ではなくそのサーバの状況でしょう。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2007-12-20 15:55
パケットキャプチャを取得して、どこが遅延しているのか調べてみてはいかがでしょうか。
progman
大ベテラン
会議室デビュー日: 2005/06/08
投稿数: 227
投稿日時: 2007-12-20 16:11
アプレットで別のサーバー(アプレットのダウンロード元でない)ということなら、
セキュリティ関係の処理に時間がかかっているのではないですか?
Nob
会議室デビュー日: 2007/12/19
投稿数: 5
投稿日時: 2007-12-20 17:59
皆さんレスありがとうございます。

>rancoさん
単体テストでは特に問題なく接続が出来たので、サーバーに問題があるとは考えておりませんでした。念のためこちらの調査もしてみます。

>インギさん
ありがとうございます。パケットのキャプチャリングはこれまでにしたことが無かったのでこれを機に挑戦してみたいと思います。

>progmanさん
セキュリティについてはポリシーファイルを対象のサーバーに対し接続出来るように設定したのですがこの事でしょうか?
progman
大ベテラン
会議室デビュー日: 2005/06/08
投稿数: 227
投稿日時: 2007-12-21 10:01
>セキュリティについてはポリシーファイルを対象のサーバーに対し接続出来るように設
>定したのですがこの事でしょうか?
はい、そうです。

アプレットとしてダウンロード元でないサーバと通信する際は、そのファイルへの
アクセスと関連した処理が発生するはずです。
そこに時間がかかっているのではないでしょうか。

それとServerはどのように生成されてますか?
遅くなる場合だけ、なにか違った生成をしてたりしないでしょうか?

Nob
会議室デビュー日: 2007/12/19
投稿数: 5
投稿日時: 2007-12-21 13:35
すいません、先ほど解決しました。

Socket接続後のパケットのキャプチャリングをしてみたところ、そのSocketの接続先のDNSの解決を行った後に
NetBIOSの名前解決の為のパケットが発行されその応答に時間がかかってしまう為に起きた現象のようです。

http://oshiete1.goo.ne.jp/kotaeru.php3?q=1377232
上記のリンクで紹介されているページを参考にしてSocketの接続を行うクラスに

import java.net.ProxySelector;
ProxySelector.setDefault(null);

を追加してみたところ単体テスト時とほぼ同じ速度でSocketの接続が出来るようになりました。
1

スキルアップ/キャリアアップ(JOB@IT)