【最大10000ポイント】当たる!!質問投稿キャンペーン!

こんにちわ。

今度ネットワーク対戦型ゲームを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版である事になにか原因があるのでは?と思っています。

本番のゲーム作成までそこまで時間があるわけではなく、モバイルノートでネットワークプログラミングができないとなるとなかなかの痛手なので、こちらの道に精通している方がいらっしゃったらどうか助言ください。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

お返事遅くなりましてすみません。



簡単にはいかなかったのですね。

ネットワーク系のコマンドをつかって調べる事になりますが
コマンドプロンプトから netstat -na を実行してサーバ側でしていしたポートが開いているか確認して見てください。 ( 画面右側に LISTEN って出ます )
#画面がスクロールして見づらいときは netstat -na | more ってやるとスペースでスクロールします

これがないと、何かがポートを開く邪魔をしています。

クライアントを起動して接続がうまくいくと、そのポートに対して ESTABLISHED という行が増えます。

なんてことをしながら調査をすすめてみてはどうでしょう?

あとは、ソケットを開いている部分(利用しているライブラリによっては wrap されているかもしれませんので、ネットワーク接続をしているあたり)を try ~ catch でExceptionを拾ってみてはどうでしょう?

timeout ぐらいはthrowされている気がします。
サーバ側は無制限としてる可能性はありますけど。
    • good
    • 0

> swingを使っていて、画面までは出ますが、そこからネットワークにつなごうとすると停止します。



エラーとかログにでてたりしません?
ネットワークに繋ごうとして停止するのであれば、ファイアーウォールやアンチウィルスソフトが邪魔をしているというのはよくあるパターンなんですがどうですか?
まれにですが、ポートが使用済みだったりとか。

#しばらく java 組んでませんが、64bit or 32bit の違いを意識しなければならないのであれば applet の配布とか面倒だなと。 バイトコード内でも vm 層でもいいから上手いことやってくれんのだろうか。。気が向いたときに試してみよう。。。

この回答への補足

一度ファイアウォールとセキュリティソフトを切って実行してみましたが、やはりだめでした。

以下の動作もセキュリティソフトが邪魔をしないようにすべて終了した状態で行っています。

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のときと同じように出ましたが、いざ接続をしようとするとやはり止まってしまいました。

正直お手上げです。

補足日時:2010/11/27 21:37
    • good
    • 0

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

この回答への補足

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

補足日時:2010/11/27 21:02
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング