-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"メッセージを受け取ることはないからですが、私のクライアントはそうしています。
私は変数の大文字の名前を使用すると思います。あるいは、あなたのポート転送が期待通りに動作しない/あなたが間違ったip/firewalls /を使っているかもしれないからです...また 'configureBlocking(false)'についてあなたは確かですか?ノンブロッキングioを使用するコードはかなり複雑です(例:https://stackoverflow.com/questions/15248555/how-to-switch-blocking-mode-of-socketchannel)。エラーが表示されないのは簡単です。 – zapl
ブレークポイントを使用してコードをデバッグしようとします。 –
私はブレークポイントを使ってみましたが、結論に達すると、それは私の友達のコンピュータのSocketChannel.open(...)に関するものです。私が言ったように、それは自分のコンピュータ上で動作します。私はまたポートやその他のものを切り替えようとしました。私がホストしていた他のサーバ(私のWebサーバやsshなど)は私が作成したものを除いてちゃんと動作するので、正しくportforwardedしたことを確認しました。 – XMan3