2016-03-28 13 views
-2

私は作成したゲームにマルチプレイヤー機能を追加しようとしています。私はソケット上でJavaのtutorialを読んだが、私が望む機能を達成することができなかった。 similar postでは、別のユーザーが私と同じ問題を経験したようです。JavaソケットはLAN上で動作しませんか?

私の場合は

...

  • 私は、Javaチュートリアルに直接与えられた二つのプログラムを実行しています。
  • 私はそれらを同じコンピュータ上で実行すると、問題なく動作します。
  • OSXマシン(root)とクライアントプログラムをW7マシンで実行すると、引き続きIOExceptionが発生します。クライアントマシンは同じポートであってもサーバマシンに到達できません(私は9355をどちらも)。
  • 私はW7マシン上でサーバープログラムを実行し、OSXマシン上のクライアントプログラム(ルート付き)を実行すると、まだIOExceptionを取得します。サーバープログラムでSystem.out.println(serverSocket.getInetAddress());を実行

いくつかの追加情報...

  • 両方のマシンに0.0.0.0/0.0.0.0を返します。

    System.err.println("Couldn't get I/O for the connection to " + hostName); 
        e.printStackTrace(); 
        System.out.println(e.getMessage()); 
        System.out.println(e.getLocalizedMessage()); 
    

    から

私は、クライアントまたはサーバマシンのいずれかでファイアウォールを無効にする必要がありますなぜ私は

Couldn't get I/O for the connection to 192.168.0.37 
Operation timed out 
java.net.ConnectException: Operation timed out 
    at java.net.PlainSocketImpl.socketConnect(Native Method) 
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) 
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) 
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) 
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) 
    at java.net.Socket.connect(Socket.java:579) 
    at java.net.Socket.connect(Socket.java:528) 
    at java.net.Socket.<init>(Socket.java:425) 
    at java.net.Socket.<init>(Socket.java:208) 
    at Main.MainClass.main(MainClass.java:17) 
Operation timed out 

を取得しますか? Javaが受信データ用のソケットをオープンしていないのですか?このチュートリアルでは、それがまだ機能していないと、それはとてもシンプルになってしまうのはなぜですか?

+0

クライアントはOSXマシンのIPアドレスを使用して接続していますか? '' 0.0.0.0''の情報はまったく役に立たない... – f1sh

+0

あなたは何か* IO *なぜあなたはすべてのデータを提示せずに結論に飛びついていますか? 「なぜファイアウォールを無効にする必要がありますか?」そうではないかもしれない。 'Javaがソケットを開いていないのですか?'はい、あります。 'なぜチュートリアルはそれをとてもシンプルにするのですか?'そうです。ここで助けが必要な場合は、秘密裏の証拠に基づく推測に基づく質問のリストだけではなく、答えることができる問題を提示する必要があります。 – EJP

+0

@ f1sh私が他の場所で読んだことから、 '0.0.0。「0」は、サーバ・プログラムがサーバ・マシン上のすべてのネットワーク・インタフェースに接続されていることを意味する。それは私がリンクした同様の記事でさえ言及されました。 – user5705019

答えて

2
ConnectException: operation timed out 

これは、ホストがダウンしているか、ファイアウォールに問題があることを示しています。

それが着信接続をブロックしているので、なぜ私は、ファイアウォール

を無効にする必要があります。完全に無効にする必要はありません。サーバファイアウォールでリッスンしているポートを開く必要があります。

は、Javaソケット

はい]を開いていない、それはあなたが0.0.0.0を得た方法です:それはそのServerSocketのリスニング・アドレスです。

+0

ファイアウォールの目的は、OPが実行しようとしている着信接続をブロックすることです。そのため、目的のポートをブロックしないようにファイアウォールを開かなければならないことは驚くべきことではありません。 +1 –

+0

私はルータのIPv4ファイアウォールを完全に無効にしましたが、接続はまだ行われていません。 – user5705019

+0

ソフトウェアのサーバー部分を実行しているコンピュータでファイアウォールを無効にしましたか? –

関連する問題