2012-03-14 6 views
2

ここに状況があります。私はBluetoothを使って、接続されたクライアント同士を互いに更新するAndroidを作成しています。アイデアは、Bluetooth接続のホストがこれらの統計情報をすべて保持する多次元配列を保持することです。クライアントが新しいステータスをホストに更新するたびに、ホストはアレイ内のデータを更新し、これをすべてのクライアントに送信します。Android Bluetooth複数のクライアントと1つのホスト

もちろん、これは私にはミルクやクッキーのように聞こえますが、残念ながらそれはありません。私は両端にBluetoothソケットを持っている必要があり、そのうちの1つがホストソケットである必要があることを理解しています。だから、1つの接続を完了するのがかなり簡単です。しかし、より多くの接続を受け入れる場合はどうすればよいでしょうか?私は周りを読んでいて、明らかに私は各接続のための新しいスレッドを作成する必要があります。私はそれがどう動くか見ていない、誰かがこれを説明してもらえますか?あなたは接続ごとにスレッドを必要とする

答えて

2

理由はこれです:

は、2つの開いたソケット、sock1とsock2を持っている想像してみてください。それらのソケットから読み込むには、あなたは、あなたがここであなたがバイトあなたが保存、場所をバイト配列である「バッファ」

in1.read(buffer); 

を呼び出すsock1から読み取るために、今すぐ

InputStream in1 = sock1.getInputStream(); 
InputStream in2 = sock2.getInputStream(); 

のようなものを呼ぶかもしれません読む。

しかし、read()はブロッキング呼び出しです。つまり、read()が返されず、read()するバイトがあるまで次の行を実行しません。したがって、sock1を読み込もうとすると、同じスレッド内にある場合は、sock2を読み込むことはできず、その逆もありません。

したがって、接続ごとに1つのスレッドがある場合、各スレッドはread()を呼び出して入力を待機できます。他のスレッドの実行中に入力が来ると、そのスレッドのターンが来るまで待ってから処理を進めます。

これを実際に実装するには、スレッドを拡張するクラスに1つの接続を処理するコードを貼り付けるだけです。

多くの詳細が含まれています - 私はAndroid BluetoothChat sampleを良いチュートリアルとして提案します。

+0

返信いただきありがとうございます。以前はBluetoothChatサンプルを見ていましたが、私はそれに従うことができるだけのコードに慣れていないと思います。しかし、私はドキュメンテーションを見て、それはまっすぐに見えるが、私は無知に残った1つの部分があります。接続を受け入れ続けて、それをBluetoothソケットを処理できる方法に渡すためにスレッド上にserversocketを開いたままにする必要がありますか? – Zizo47

+1

はい、それは私がBluetoothを利用する際に使用した戦略です – mfrankli

+0

さて、あなたの答えがどうもありがとう、あなたの話が分かります。あなたがスタックオーバーフローで人々にメッセージを送ることができないことは残念です。そうでなければ、おそらく発生する他の質問に答えるように依頼しました。<とにかく、もう一度感謝します... – Zizo47

関連する問題