web-dev-qa-db-ja.com

ピアツーピア通信オプション

誰かがAndroidフレームワーク内のピアツーピア通信で現在許可されている方法を確認できますか?私はjson文字列を転送する必要があり、現在SMSを使用していますが、問題なく動作しますが、問題は、データが大量のテキストメッセージとしても表示されることです。私は、Reto MeierのProfessional Android Application Developmentの最初のエディションを読みましたが、セキュリティ上の懸念によりデータ転送オプションが実装されていなかったと述べています。

これはまったく変更されましたか?また、ピアツーピアのデータ転送をどのように行いますか?

23
John J Smith

QualcommのAllJoynライブラリ を見たことはありますか? Bluetoothまたはwifiで動作するように設計されているため、適切に動作する場合がありますが、3G以上のネットワークで接続している場合は動作しません。

同じネットワーク上にない2つのリモートデバイス間のネットワークのばらつきと信頼性を考慮して、ピアツーピアが最適なソリューションであるかどうかを質問し、アプリケーションサーバーの使用を検討することを提案します。 Cloud to Device Messaging [廃止予定](おそらくGoogle App Engineと連携して)。つまり、メッセージを送信するために、送信者はメッセージをサーバーに渡し、サーバーはそれを受信者に渡します。

理論的には、ネット上のすべてのデバイスは一意のIPアドレスを持ち、相互に通信できますが、ルーター/ファイアウォールの構成が異なるため、それほど単純ではないため、使用するポートに特に注意を払う必要があります。セキュリティ上の理由から、ポートはデフォルトでブロックされています。

20
Ollie C

UDP/TCPソケットを使用するだけです。別のスレッドで、サーバー側のリスナーソケットを設定しました。もちろん、アプリケーションを最初に起動する必要があります(または常にバックグラウンドで実行する必要があります)。次に例を示します。

http://thinkandroid.wordpress.com/2010/03/27/incorporating-socket-programming-into-your-applications/

ピアディスカバリも必要な場合は、事態をさらに困難にします。

4
ldx

また、利用可能なオープンソースプロジェクトであるpeerdroidもご覧ください here 。私は、フェデレーションデバイスのコレクション(Bluetoothペアリングと同様に、必要に応じて事前ペアリングされている)の観点から、ピア通信オプションを調査してきました。このライブラリは、あなたがやろうとしていることの基礎を与えるように見えます。

自分のネットワーク(自宅やオフィスのWiFiなど)を使用している場合は、接続されている他のデバイスを照会できるはずです。現在使用しているネットワークが制御下にない場合(モバイルネットワークまたはパブリックwifi)、ネットワークは各デバイスを他のすべてのデバイスから隔離するように構成されています。この場合、サーバーを中央に配置する以外に選択肢はありません。これにより、独自のアーキテクチャ上の妥協がもたらされます。Google独自のインフラストラクチャでプッシュ通知をサポートするGoogle App Engineを使用しない限り、すべてのデバイスが定期的にサーバーをポーリングするか、接続を開いたままにする必要があります。

3
Phil

Ldxの回答に感謝しますが、ご指摘のとおりピアの発見が必要です。 XMPPが適切なテクノロジーであることを示すいくつかのさらなる調査があり、現在はいくつかのサービスが提供されていますが、これらは「サーバー」からクライアントへの通知を目的としているようです。良い議論があります ここ XMPPといくつか もっと詳しく ですが、ポーリングvプッシュ、長時間実行されるオープンhttpなど、まだ対処すべき問題があるようです接続とバッテリー寿命。 Xtifyは、特にWebサービスに関しては有望に見えます。これが、ピアツーピアデータ通信のトピックを見ている他の人に適切な情報を提供することを願っています。

1
John J Smith

PushSharp を試してください。 iOS(iPhone/iPad APNS)、Android(C2DMおよびGCM-Google Cloud Message))、Windows Phone、およびWindows 8デバイスにプッシュ通知を送信するためのサーバー側ライブラリ。

0
Ludwo