9

Android で Bluetooth や WiFi Direct を使用する場合、すべてのハンドシェイクなどの最後に、ソケットが必要になります。

TCP/IP では、HTTP、XMPP、IMAP などの高レベル プロトコル用に、ソケットの上にレイヤーを重ねる無数のライブラリがあります。これらのライブラリのおかげで、よりドメイン固有の抽象化を扱うことができます。ライブラリによって処理される低レベルのソケット プラミングを伴う操作 (「このファイルをダウンロードする」など)。

質問: Android の Bluetooth および/または WiFi Direct レイヤーを介して生成されたソケットで動作することが知られている (または動作する可能性が高い) 高レベル プロトコルに相当するものはありますか?

今のところ、私は特定のプロトコルにこだわりはありません。この種の接続オプションを開発者が簡単に使用できるようにするために、この種のプロトコル層の例を探しているだけです。

たとえば、ソケットの代替ソースを使用するOkHTTPのフォークまたはアドオンを作成でき、おそらく同じことを行う Java HTTP サーバーを作成できるようです。これらを考慮して、アプリ開発者は、Bluetooth または WiFi Direct を介して通信する HTTP アプリを作成します (そして、少なくともクライアント側では、接続固有のペアリングとハンドシェイクが行われると、コーディングはかなり「自然」な感じになるはずです)。

IOW、生のソケットを扱うことに戻ると、 20年前のように感じます... :-)

ありがとう!


アップデート

ZeroMQ の回答に対するクリストファー・ミシンスキーのコメントに基づいて、いくつかの明確化が必要であると考えました。

私が望まないことを言うのは簡単です: ソケットを作成した後は、ソケットに触れたくありません。より高いレベルの何かが私のためにそれらを処理し、さらに私が「プロトコル」と見なすものを処理する必要があります(たとえば、ソケットのクローズを超えて、通信操作がいつ終了したかを判断するなど)。

ほとんどの場合、これは私の本用です。低レベルのソケットに関する書籍の例のほとんどは非現実的です。たとえば、「サーバーへのソケットを開き、アップロードする画像を表すバイトのブラストをすぐに開始し、完了したらソケットを閉じる」などです。例は機能しますが、実際にはそのようなものを書くことはありません:

  • 実際にソケット レベルで作業している場合は、自分でプロトコルを展開している場合でも、認証やエラー処理などに対処することを期待するプロトコルを実装することになります。

  • 現在、インターネット操作のためにソケットを直接操作する開発者はほとんどいません。

レイヤーが提供するプロトコルが、開発者が慣れ親しんだもの (HTTP など) か、使用したことがなくても聞いたことがあるもの (XMPP など) であれば素晴らしいことです。そして、単純なシナリオで解決します (たとえば、N-way サポートはクールですが、必須ではありません)。この点で、予備調査 (睡眠不足の脳によって行われた) に基づくと、ZeroMQ は悪い選択肢ではありません。たとえば、任意のソケットで動作する可能性のある XMPP スタックと比較して、「ブランド認知」が少し欠けています。しかし、カフを外すと、私が探している他のものを満たすようです.

これらのスタックには、基礎となるトランスポートによって課せられる制限があることを認識しています (たとえば、Bluetooth は N の値が小さい場合にのみ N-way でうまく機能します)。そして、ここでも私の本でも、私が描写するソリューションがソケットベースの通信のすべてであり最終的なものであるとは絶対に描写したくありません。

私はただ、実際の使用により現実的であることを祈る何かが欲しい. 私は常に TCP/IP 通信に高レベルのプロトコルを使用しており、直接ソケット操作の経験が不足しているため、理解できるものであればボーナス ポイントです。

4

2 に答える 2

2

ZeroMQはソケット接続の管理に役立つことがわかりました。JAVA を含む複数の言語をサポートしています。wifi-direct または BT 経由で接続を確立したら、これを使用してソケットを管理できます。

于 2013-06-11T11:18:42.110 に答える
0

それはやや古い質問であり、すでに回答されていることは知っていますが、貢献したいと思います。

私はこのアプリを作成しました: https://play.google.com/store/apps/details?id=com.budius.WiFiShootと WiFi ダイレクト接続 n ハンドシェイクが多少壊れており、それが不満なユーザーのほとんどの原因です。優れたhttps://github.com/EsotericSoftware/kryonetを使用してすべての通信を処理しています

私のコードは、例で見たものとほとんど同じです。kryo を作成し、クラスを登録し、サーバーを開き、クライアントをサーバー IP に接続し、ファイル情報を使用してオブジェクトを撮影し、後でこのコードhttps://codeを使用して実際のファイルを撮影します。 .google.com/p/kryonet/source/browse/trunk/kryonet/test/com/esotericsoftware/kryonet/InputStreamSenderTest.java

それが役に立てば幸い。

于 2014-01-11T23:11:17.557 に答える