web-dev-qa-db-ja.com

Javaのリアルタイム(ほぼ)双方向通信

最初に問題のコンテキストを説明します。大学のプロジェクトの場合、Androidアプリケーションを実装します。Androidアプリケーション(およびその他のアプリケーション)は、リモートソースにデータを送信できます。そのリモートソースは、Androidアプリケーションにメッセージを送信することもできます。例えば、メッセージは「apply configuration x」、「what is your status」のようになります。リモートソースにしたいこれらのメッセージを以下に送信できます:

  1. オーバーヘッドを減らします。 Androidデバイスが必要のないときにデータを送信することを望みません。これはデータと電力を使用します。
  2. たとえば、バージョン1では、Androidアプリケーションのxの値を確認できます。バージョン2では、yの値を確認できます。

私はこれをJavaのソケットを使用して実装することを見てきました。 Androidアプリケーションがリモートソースと通信するのは簡単です。ルーター(ポート転送)を構成し、すべて問題ありません。リモートソースがAndroidアプリケーション。WiFiホットスポットを使用している、3Gをオンにしているなど、ソケット経由で直接デバイスにアドレスを指定できないのでしょうか。

問題を解決するためのアプローチは、私が信じているほど一般的ではありません。それは、私がすべきでないことをしようとしていると私に信じさせます。誰かがこれにいくつかの光を当てて、私にいくつかのガイダンスを提供できますか?

どうもありがとう。

3

あなたが言うように、通常、中央サーバーで発生し、モバイルデバイスへの接続を試みるソケット接続を確立することは非常に困難または不可能です。代わりに、モバイルデバイスで接続を開始し、中央サーバーに接続し、中央サーバーからのコマンドを待機するソケットを開いたままにします。もちろん、あなたのAndroid=コードが接続時に行う最初のことは、中央サーバーに対してそれ自体を識別することです。そのため、中央サーバーは、誰と通信しているのかを知っています。

さいわい、Googleは Google Cloud Messaging for Android ですでにこれを行っています。

Android(GCM)用のGoogleクラウドメッセージングは​​、サーバーからユーザーのAndroid搭載デバイスにデータを送信できるサービスです。これは、アプリに新しいことを知らせる軽量のメッセージになる場合がありますサーバーからフェッチするデータ(たとえば、友人がアップロードした映画)、または最大4 KBのペイロードデータを含むメッセージ(インスタントメッセージングなどのアプリがメッセージを直接消費できる)にすることができます。

3
Greg Hewgill

コミュニケーションとのつながりを混乱させていると思います。アプリケーションは、TCPまたはUDPを使用してサーバーとの通信を開くことができ、データを送信せずにそこに座っているだけです。双方向パイプが開いており、接続の両端で開始されたメッセージの送信に使用できます。

0
ddyer