2017-06-23 6 views
-3

私はJavaで小さなサーバーを作ろうとしていますが、私は立ち往生しています。 誰かがポートフォワーディングについて何か言う前に、はい、私はそれをしました。このSocketChannel接続で何が問題になっていますか?

今、問題です。 これは私の接続コードです:

InetSocketAddress addr = new InetSocketAddress(ip,5102); 

socketChannel = SocketChannel.open(addr); 

System.out.println("Connected"); 

それは私がそれを実行するが、私の友人はそれをしようとしたとき、それが動作していない作業を行います。 、その関係のない

InetSocketAddress addr = new InetSocketAddress("",5102); 

serverSocketChannel = ServerSocketChannel.open(); 

serverSocketChannel.bind(addr); 

new Thread(new Server()).start(); 

また、私はちょうどそれが混乱を引き起こすことはありませんので、ここではこれを追加する:

これは私のサーバーのコードです。 これはサーバーのスレッドです。

@Override 
public void run() { 
    while(true) { 
     try { 
      serverSocketChannel.accept(); 

      System.out.println("newuser"); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

私はすべてのエラーメッセージを得ることはありませんが、私の友人はでConnectExceptionを取得します:接続がタイムアウトしました:私はかなり確信している

socketChannel = SocketChannel.open(addr); 
、Client.java:13まで追跡され、接続彼らはSocketChannel.open(...)関数内にあります。なぜなら、彼らは "Connected"メッセージを受け取ることはないからですが、私のクライアントはそうしています。

+0

私は変数の大文字の名前を使用すると思います。あるいは、あなたのポート転送が期待通りに動作しない/あなたが間違ったip/firewalls /を使っているかもしれないからです...また 'configureBlocking(false)'についてあなたは確かですか?ノンブロッキングioを使用するコードはかなり複雑です(例:https://stackoverflow.com/questions/15248555/how-to-switch-blocking-mode-of-socketchannel)。エラーが表示されないのは簡単です。 – zapl

+0

ブレークポイントを使用してコードをデバッグしようとします。 –

+0

私はブレークポイントを使ってみましたが、結論に達すると、それは私の友達のコンピュータのSocketChannel.open(...)に関するものです。私が言ったように、それは自分のコンピュータ上で動作します。私はまたポートやその他のものを切り替えようとしました。私がホストしていた他のサーバ(私のWebサーバやsshなど)は私が作成したものを除いてちゃんと動作するので、正しくportforwardedしたことを確認しました。 – XMan3

答えて

0

これで数時間後に解決策が見つかりました。

一部

InetSocketAddress addr = new InetSocketAddress("",5102); 

は、 "" を持つように想定されていません。これで、それを交換した後 、

InetSocketAddress addr = new InetSocketAddress(5102); 

は、それが何の問題もなく働きました。

関連する問題