回答する前に、これはクライアントの問題であり、サーバーの問題ではないことに注意してください。私はターミナルでtelnetを使用していたので、サーバに接続し、telnetはサーバに接続できました。今、私はなぜconnectメソッドがローカルホストアドレスとサーバーのプライベートIPアドレスの両方を使用して接続できないのかわかりません。ブロックするだけで、コールバックメソッドを呼び出すことはありません。Javaソケットメソッドブロック '接続'が呼び出されたとき
client.connect(new InetSocketAddress(hostname, 1993));
callback.onConnection(); // Never invokes!
OutputStream writer = client.getOutputStream();
InputStream reader = client.getInputStream();
byte[] buffer = new byte[1024 * 1024];
P.S私は何か間違っています。私はUbuntuマシンでこのコードを実行しているので、telnetがサーバーに接続できたのでファイアウォールの問題は発生しません。サーバーとクライアントの両方がTCPプロトコルを使用しており、クライアント側とサーバー側のどちらにも例外はスローされません。間違っていると思われるものに対する示唆は非常に役に立ちます。私はseverコードのようなより多くのコードを表示することができます。サーバーはC++で書かれており、クライアントはJavaで書かれています。
編集:
私は結局接続を確立できました。 connectメソッドを使用する代わりに、ソケットのコンストラクタを使用して相互に接続します。私はなぜ接続doesntの仕事を知らないのですか?接続が確立されるまで、
client = new Socket(hostname, port);
callback.onConnection();
OutputStream writer = client.getOutputStream();
InputStream reader = client.getInputStream();
byte[] buffer = new byte[1024 * 1024];
reader.read(buffer);
提案:Wiresharkののコピーを取得し、3ウェイハンドシェイクで何が起こっているかを追跡:http://www.wireshark.org – paulsm4
'callback'は何ですか? – biziclop