• 締切済み

ネットワークプログラミングで困っています。

こんにちわ。 今度ネットワーク対戦型ゲームをJavaで作成することになり、現在、それに向けていろいろと勉強しています。その一環として、オンラインチャットのプログラムを文献から見つけてネット上で動かしてみようと思い、いざ実際にやってみました。自分はPCを二台持っていて、一台はASUS製のモバイルノート(UL20A)でOSはWindows7 Home Premium (64bit板)で、もう一台はDell製のホームノート?(Stdio)でOSはWidows Vista Ultimet (32bit版)です。実行したところ、Stdioの方では問題なく動くのですが、UL20Aの方では最後まで動きませんでした。swingを使っていて、画面までは出ますが、そこからネットワークにつなごうとすると停止します。 作成したプログラムは、最初に実行したときにサーバ名を決めてサーバを構築し、その後もう一度実行して、クライアントとなってサーバ名を入力し、その後ニックネームをつけてチャット部屋(?)に入るというものです。これだけですので一台でも一応実行可能です。 細かいプログラムは文献を参考にしていますので、申し訳ありませんがここでは割愛させていただきます。 ちなみに二台とも環境はjdk1.6.0_22で、綜合開発環境のeclipseを使っているのでプログラム自体にはミスはないと思います。そこは文献を参考にして、実際にStdioで動いているので多分大丈夫です。そして同じプログラムをUL20Aで動かそうとすると動かないのです。 さらに、知人のPCを借りて同じプログラムを起動してみたら起動しました。レッツノートのWindowsXP(32bit版)でした。 これらから推測するにどうやらUL20AのPC内の環境が原因ではないかと思っています。 実際にほかのネットワーク関係のプログラムを実行するとやはりUL20Aのみ実行できませんでした。ネットワークが関係ないものは問題なく動くのですが。 そこを調べようと思いいろいろと試行錯誤しましたが、いまいち解決策らしいものが見つからなかったので、この場を使わせていただきました。 個人的にはOSが64bit版である事になにか原因があるのでは?と思っています。 本番のゲーム作成までそこまで時間があるわけではなく、モバイルノートでネットワークプログラミングができないとなるとなかなかの痛手なので、こちらの道に精通している方がいらっしゃったらどうか助言ください。

みんなの回答

  • NARH
  • ベストアンサー率82% (88/107)
回答No.3

お返事遅くなりましてすみません。 簡単にはいかなかったのですね。 ネットワーク系のコマンドをつかって調べる事になりますが コマンドプロンプトから netstat -na を実行してサーバ側でしていしたポートが開いているか確認して見てください。 ( 画面右側に LISTEN って出ます ) #画面がスクロールして見づらいときは netstat -na | more ってやるとスペースでスクロールします これがないと、何かがポートを開く邪魔をしています。 クライアントを起動して接続がうまくいくと、そのポートに対して ESTABLISHED という行が増えます。 なんてことをしながら調査をすすめてみてはどうでしょう? あとは、ソケットを開いている部分(利用しているライブラリによっては wrap されているかもしれませんので、ネットワーク接続をしているあたり)を try ~ catch でExceptionを拾ってみてはどうでしょう? timeout ぐらいはthrowされている気がします。 サーバ側は無制限としてる可能性はありますけど。

  • NARH
  • ベストアンサー率82% (88/107)
回答No.2

> swingを使っていて、画面までは出ますが、そこからネットワークにつなごうとすると停止します。 エラーとかログにでてたりしません? ネットワークに繋ごうとして停止するのであれば、ファイアーウォールやアンチウィルスソフトが邪魔をしているというのはよくあるパターンなんですがどうですか? まれにですが、ポートが使用済みだったりとか。 #しばらく java 組んでませんが、64bit or 32bit の違いを意識しなければならないのであれば applet の配布とか面倒だなと。 バイトコード内でも vm 層でもいいから上手いことやってくれんのだろうか。。気が向いたときに試してみよう。。。

vnightmarev
質問者

補足

一度ファイアウォールとセキュリティソフトを切って実行してみましたが、やはりだめでした。 以下の動作もセキュリティソフトが邪魔をしないようにすべて終了した状態で行っています。 eclipseを使用していて、一応形だけは実行できるのでエラーとかはログでは出てきませんでした。一応コマンドプロンプトで実行してみましたが、(netというパッケージを作ってあります) javac net/*.java 注:net\Server.javaの操作じゃ、未チェックまたは安全ではありません。 注:詳細については -Xlint:uncheckedオプションを指定して再コンパイルしてください。 と出てきます。ですのでオプションを指定してみると javac -Xlint:unchecked net/*.java net\Server.java:14:警告:[unchecked]raw型 java.util.Vectorのメンバとしてのadd(E)への無検査呼び出しです。 users.add(this); ^ 警告1個 というものが出てきます。 そしていろいろと調べて javac -Xlint:unchecked -source 1.3 net/*.java とするとコンパイルが通りました。 その後、実行してみるとswingで作った画面がeclipseのときと同じように出ましたが、いざ接続をしようとするとやはり止まってしまいました。 正直お手上げです。

  • SaKaKashi
  • ベストアンサー率24% (755/3136)
回答No.1

OSが64BitならJDK/JREも64Bit版をインストールしてください。

vnightmarev
質問者

補足

一応JDKもJREも64Bit版をインストール済みです。環境変数はユーザー、システムともにC:\Program Files (x86)\Java\jdk1.6.0_22\bin(つまり32bit版)を設定しています。以前にここをC:\Program Files\Java\jdk1.6.0_22\bin(64bit版)に変更しても、問題は解決しませんでした。

関連するQ&A