回答する前に、これはクライアント側の問題であり、サーバーの問題ではないことに注意してください。ターミナルでtelnetを使ってサーバーに接続したところ、telnetでサーバーに接続できました。現在、connect メソッドが接続できない理由がわかりません。サーバーのローカルホスト アドレスとプライベート IP アドレスの両方を使用しました。ブロックするだけで、コールバック メソッドを呼び出すことはありません。
client.connect(new InetSocketAddress(hostname, 1993));
callback.onConnection(); // Never invokes!
OutputStream writer = client.getOutputStream();
InputStream reader = client.getInputStream();
byte[] buffer = new byte[1024 * 1024];
PS私は何か間違ったことをしていますか?telnet がサーバーに接続できたため、ファイアウォールの問題ではありません。Ubuntu マシンでこのコードを実行しているため、ファイアウォールがないと思います。サーバーとクライアントの両方が TCP プロトコルを使用しており、クライアント側でもサーバー側でも例外はスローされていません。何が間違っている可能性があるかについての提案は非常に役立ちます。サーバーコードのようなコードをさらに表示できます。サーバーは C++ で作成され、クライアントは Java で作成されます。
編集:
やっと接続を確立することができました。connect メソッドを使用する代わりに、ソケットのコンストラクターを使用して内部的に connect を呼び出しました。接続が機能しない理由がわかりません。
コードの変更は次のとおりです。
client = new Socket(hostname, port);
callback.onConnection();
OutputStream writer = client.getOutputStream();
InputStream reader = client.getInputStream();
byte[] buffer = new byte[1024 * 1024];
reader.read(buffer);