クライアントのように機能するC#アプリケーションがあり、パブリックインターネットに直接接続されているシステム(データカードまたはポート転送を介して)にインストールすることも、ルーターの背後にあることもできます(ポート転送なし)。
Java を使用して開発されたもう 1 つのアプリケーションは、公共のインターネット上にあるサーバー アプリケーションのように機能します。今、私の Java アプリケーションは、ルーターの背後にある C# アプリケーションにメッセージをプッシュしたいと考えています。Java アプリケーションには、クライアントのパブリックおよびプライベート (192.168.xx) IP アドレスがあります。Java アプリケーションは 24 時間年中無休で実行することになっています。
だから、今私には2つのオプションがあります:
C# アプリケーションが起動するたびに、Java アプリケーションとのソケット接続が確立され、このソケット接続は C# アプリケーションが閉じられるまで開いたままになります。
Java アプリケーションが C# アプリケーション用の何かを持っている場合は常に、C# アプリケーションとのソケット接続を作成し、メッセージをプッシュしてから接続を閉じます。
ここで、最初のオプションでは、何千ものクライアント アプリケーションが存在する可能性があるため、多くの不要な接続が発生するという問題があり、ある日、一部のクライアントにプッシュするものが何もなくなる可能性があります。2番目のオプションを選択する方法がわかりません。
このタスクを達成するための正しい方法は何ですか (オプション 1 または 2)?
UPnP プロトコルは 2 番目のオプションに適していますか? API (C# と Java) の両方を備えたオープン ソースの UPnP ライブラリは何ですか。ohnetと呼ばれるものを見つけました。それは私にとって正しいことでしょうか?OhNet でテストできる小さな例は 1 つも見つかりませんでした。