2 人のユーザー間で P2P UDP および TCP 接続を確立する必要があります。どちらも NAT の背後にあります。
少し調べてみると、 STUN、TURN、およびICEにたどり着きました。
UDPでのみ動作するように見えるjSTUN以外のJavaソリューション(ライブラリ)はありますか? そしてTURN、ICEは対称NAT問題に対してはるかに優れています。
自分の角を鳴らしすぎないように、IcedJavaを試すことをお勧めします。(これは SipTools プロジェクトの一部です) 積極的に開発されており、安定したリリース 0.9 バージョンがあり、箱から出してすぐに RTP ストリーミングなどのユース ケースをサポートします。
TCP サポートに関しては、それは後のリリースに予定されていますが、3 ウェイ ハンドシェイクがブロックされているため、シンメトリック nat 経由の TCP をサポートするのに苦労するでしょう。ICE 仕様への TCP 拡張でさえ、TCP 接続は nat されたピア間の UDP 接続よりも成功する可能性がはるかに低いことに注意してください。
とはいえ、TCP パケットを UDP ブリッジ経由でルーティングすることで、これを回避できます。これには、すべてのエラー修正とフロー制御機能が含まれます。(これについては RFC を忘れましたが、これは最終的な仕様です) それでも、これらはすべて比較的新しい仕様であり、ICE-TCP 仕様はまだ最終的なものではありません。活発な開発であっても、これらの実装には時間がかかります。
開発者によると、ice4jもあります。
STUN、TURN、および ICE プロトコルの Java 実装。このプロジェクトは、Stun4J イニシアチブの継続です。このプロジェクトの目標は、VoIP Java 開発者に NAT とファイアウォールを処理する手段を提供することです。
sipcommunicator 開発者によって開発されました。
jstuntを試すことができます- もうメンテナンスされていませんが、ソースは利用できるようです。それらは、STUNT ライブラリとサンプル Java サーバー/クライアント アプリケーションを含む jar を提供します。私の読書によると、これはネイティブ Java ではないため、これは特定のアーキテクチャでのみ機能する可能性があります。