HT03AでMDNSのレスポンスを受信できない

瀏覽次數:495 次
跳到第一則未讀訊息

Keisuke Nakamura

未讀,
2009年12月17日 上午9:48:062009/12/17
收件者:android-g...@googlegroups.com
k-sukeと申します。

よろしくお願いします。

【問題】
MDNSの戻りをHT03Aで受けられない。
しかし、x86上のandroidでは動く。
http://www.android-x86.org/

【詳細】
現在、MDNSを利用してIPアドレスを取得するアプリケーションを作成しています。
MulticastSocketクラスを使用して、送受信するプログラムです。

・Multicastを送信するアクティビティ
・Multicastを受信するサービス
の単純な構成です。

この構成のプログラムが、
x86上の環境では、送受信ともに正常に処理されますが、
ht03Aだと送信は処理されますが、受信が処理されません。

ちなみに、
・HT03Aは、無線LANでサーバにアクセスしています。
 ⇒有線と無線の違いが起因している?
・Wiresharkでパケットキャプチャしたところ、
 HT03Aから送信されたリクエストに対しても、レスポンスが返却されています。
・HT03Aから無線LAN経由でWEBサーバなどにアクセスは出来ます。
 ⇒無線LANの通信は問題ない?
・パーミッションは、以下を指定しています。
 android.permission.CHANGE_WIFI_MULTICAST_STATE
 android.permission.INTERNET

何か解析するうえでの情報を持っている人がいれば、
ご助言を頂きたいと思います。

なお、x86マシン、HT03Aともに、android1.6です。

よろしくお願いします。

Akio Kondo

未讀,
2009年12月17日 中午12:45:142009/12/17
收件者:日本Androidの会
こんどうです。

G1、ADP1、GDDPhone、HT-03Aでは通常はWiFiのアドホック接続が出来ません。
※参考
 http://groups.google.co.jp/group/android-developers/msg/b846c3c253a59687

せっかくWiFiのマルチキャスト機能があるのに宝の持ち腐れ状態です。

これができれば、すれ違い通信などが実現できるのですが・・・

動作確認はしていませんが、rootが取得できるADP1などの端末であれば、
なんとか設定出来るような情報もあるようです。
http://www.google.co.jp/search?hl=ja&q=adp1+adhoc+%22WiFiAdhoc+%3D+1%22&btnG=%E6%A4%9C%E7%B4%A2

テザリング防止などの事情があるのだと思いますが、
早く標準でもadhoc接続できるようになって欲しいものです。

On 12月17日, 午後11:48, Keisuke Nakamura <ganbare.keis...@gmail.com>
wrote:

Akio Kondo

未讀,
2009年12月17日 下午1:01:432009/12/17
收件者:日本Androidの会
こんどうです。

構成を確認していなかったので、
ちょっとまとはずれな回答だったかもしれません。
すみません。

環境がadhocでないとすれば、別の原因かもしれません。

On 12月18日, 午前2:45, Akio Kondo <koji...@gmail.com> wrote:
> こんどうです。
>
> G1、ADP1、GDDPhone、HT-03Aでは通常はWiFiのアドホック接続が出来ません。
> ※参考
>  http://groups.google.co.jp/group/android-developers/msg/b846c3c253a59687
>
> せっかくWiFiのマルチキャスト機能があるのに宝の持ち腐れ状態です。
>
> これができれば、すれ違い通信などが実現できるのですが・・・
>
> 動作確認はしていませんが、rootが取得できるADP1などの端末であれば、

> なんとか設定出来るような情報もあるようです。http://www.google.co.jp/search?hl=ja&q=adp1+adhoc+%22WiFiAdhoc+%3D+1%...

Tatsuo Nagamatsu

未讀,
2009年12月17日 晚上7:38:242009/12/17
收件者:android-g...@googlegroups.com
Multicast socketが Androidで動作しない問題は以下に報告されています。


Android 1.6から以下の APIが WifiManagerに追加されており、フレームワーク側での Multicastの対応は含まれているようです。

http://developer.android.com/reference/android/net/wifi/WifiManager.html#createMulticastLock(java.lang.String)

しかし、カーネルのコンフィギュレーションに Multicast対応に必要な CONFIG_IP_MULTICASTが含まれていないようです。

2.0.1での動作していないという報告もあがっています。

x86の移植では、これが修正されているのではないでしょうか。

--

2009/12/17 Keisuke Nakamura <ganbare...@gmail.com>

--

このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。



Keisuke Nakamura

未讀,
2009年12月18日 上午9:03:202009/12/18
收件者:android-g...@googlegroups.com
こんどうさん Nagamatsuさん

k-sukeです。遅いレスポンスですいません。

返信ありがとうございます。
いくつか非常に大事なことを記載していませんでした。
・HT-03AとMDNSサーバは、無線LANアクセスポイントを経由している
・x86端末は有線LANで通信している。

それで、本日、x86マシンで無線LANで試したところ、やはりNGでした。
よって、無線LANとマルチキャストの受信の組み合わせが怪しいと睨んでいます。

しかし、HT-03A上で、MDNSクライアントを実装したperlプログラムを動かしたところ、
正常にレスポンスを受信できました。

よって、HT-03Aのハードの問題ではなく、ソフト問題なのかと。。。
なので、dalvikvmが無線LANとマルチキャストの受信が出来ないのかと思っています。

しかし、nagamatsuさんも記載されているように、リファレンス的には1.6で、受信出来るべきなのかと悩んでおります。


>Android 1.6から以下の APIが WifiManagerに追加されており、フレームワーク側での Multicastの対応は含まれているようです。
>http://developer.android.com/reference/android/net/wifi/WifiManager.html#createMulticastLock(java.lang.String)

いまひとつ、
「android1.6のdalvikvmでは、無線LAN環境でマルチキャストの受信が出来ない」
と決めつけて良いのかを悩んでおります。

2009年12月18日9:38 Tatsuo Nagamatsu <naga...@gmail.com>:

Satoshi Konno

未讀,
2009年12月20日 下午1:31:162009/12/20
收件者:android-g...@googlegroups.com
k-sukeさん

今野です。はじめまして。

> いまひとつ、
> 「android1.6のdalvikvmでは、無線LAN環境でマルチキャストの受信が
> 来ない」と決めつけて良いのかを悩んでおります。

現在、Android 1.6 + ADP1で開発をしていますが、マルチキャストの
送受信に問題ありませんよ。パーミッションはINTERNETだけでOKです。

まず、一般的な話題として、無線LANのAPはマルチキャストは再送を
しないので、ロストする可能性がありますが ....

> しかし、HT-03A上で、MDNSクライアントを実装したperlプログラムを
> 動かしたところ、正常にレスポンスを受信できました。

こうなると、HT-03Aか、ソフトウェア上の問題かもしれません。

#ただ、マルチキャスト系仕様の運用規定では、Wireless接続時には
#複数回繰り返すことが、必須とされているものもあります。

ちょっと、気になって関連のプログラムを確認して見たのですが
Android v1.6から、インタフェース毎にバインドするような
改修を実施していました。

http://cgupnpjava.svn.sourceforge.net/viewvc/cgupnpjava/trunk/cyberlink/ChangeLog?revision=141&view=markup

改修の経緯は(早くも)うろ覚えになってしまったのですが ....

以前のAndroidバージョンは、ローカルインタフェースが取得でき
なかったので、単にそのAndroid特有な実装を元に戻しただけかも
しれませんが ....

以上、ご参考下さい。

--
Satoshi Konno
http://www.cybergarage.org

Keisuke Nakamura さんは書きました:

Kazuo Shimokawa

未讀,
2009年12月20日 晚上8:10:472009/12/20
收件者:android-g...@googlegroups.com
 下川です。 B&NのNookが届きました。

 USBからはドキュメントフォルダーしか見えないので、
Androidアプリは通常ルートではインストールできません。
 1台しかないので、以下の改造は行っていません。
http://nookdevs.com/Rooting

 埋め込みフォントのPDFで日本語は表示できました。
 埋め込みナシだと、何も表示されません。Droidフォント
は入っていないようです。

 こんな状態ですが、明日、新宿にお越しいただければ
デモし、Kindle国際版と比較して触っていただけます。
 出版社、印刷会社の方と同席になります。

・日時 12月22日(火) 各回1時間程度
 【第一回】 17:00-
 【第二回】 18:30-

・場所 イースト株式会社
http://www.est.co.jp/eastinfo/map.shtm

・参加申込み
 hpma...@est.co.jp 宛に、
 1.お名前
 2.【第一回/第二回】
 をメールしてください。
 1社何名で結構ですのでお名前を列挙してください。
 お名前だけで、名刺の提示も不要です。
 満員の場合は、ご連絡します。

Keisuke Nakamura

未讀,
2009年12月21日 上午9:10:582009/12/21
收件者:android-g...@googlegroups.com
今野さん。こんばんわ。

返信遅くなりすいません。
インラインで回答させて頂きます。(一部、文面を削除しました。)

> 現在、Android 1.6 + ADP1で開発をしていますが、マルチキャストの
> 送受信に問題ありませんよ。パーミッションはINTERNETだけでOKです。

おぅ。そうですか。

> ちょっと、気になって関連のプログラムを確認して見たのですが
> Android v1.6から、インタフェース毎にバインドするような
> 改修を実施していました。
>
> http://cgupnpjava.svn.sourceforge.net/viewvc/cgupnpjava/trunk/cyberlink/ChangeLog?revision=141&view=markup
>
> 改修の経緯は(早くも)うろ覚えになってしまったのですが ....
>
> 以前のAndroidバージョンは、ローカルインタフェースが取得でき
> なかったので、単にそのAndroid特有な実装を元に戻しただけかも
> しれませんが ....

私の受信側の実装は、MulticastSocketクラスを使用して実装しました。
⇒諸々の事情でソースが手元になく、提示できないです。すいません。
MulticastSocket#receive
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/net/DatagramSocket.html#receive%28java.net.DatagramPacket%29

もうすこし、低レベルのコードで実装すれば動くのですかね。
英語が不得手なもので、誤訳しているのかもしれませんが、
下記のスレッドでも動いたって人もいるのかと思っています。
http://code.google.com/p/android/issues/detail?id=2917
ちなみに、このスレッドに記載されているJMDNSといるライブラリで動かなかったので、
MulticastSocketクラスを使用したコードを記述しました。
まぁ、それでもNGだったのですが。。。
http://sourceforge.net/projects/jmdns/

とにかく、もうすこし、低レベルのコードで再実装してチャレンジしてみまっす。
実験環境を使用できるのが限定されているので、
結果のご報告が遅れるかもしれませんが、ハッキリしたらご連絡をします。

なお、その他の情報をお持ちの人がいれば、投稿して頂くと助かります。^-^;

Satoshi Konno

未讀,
2009年12月21日 下午1:03:592009/12/21
收件者:android-g...@googlegroups.com
k-sukeさん

今野です。はじめまして。

> 私の受信側の実装は、MulticastSocketクラスを使用して実装しました。
> ⇒諸々の事情でソースが手元になく、提示できないです。すいません。

より直接的な回答をすれば、下記がSSDPというマルチキャストベース仕様の
一部を、MulticastSocketクラスを利用した実装例になります。

http://cgupnpjava.svn.sourceforge.net/viewvc/cgupnpjava/trunk/cyberlink/upnp-stack/src/main/java/org/cybergarage/upnp/ssdp/HTTPMUSocket.java?revision=118&view=markup

> もうすこし、低レベルのコードで実装すれば動くのですかね。
> 英語が不得手なもので、誤訳しているのかもしれませんが、
> 下記のスレッドでも動いたって人もいるのかと思っています。
> http://code.google.com/p/android/issues/detail?id=2917
> ちなみに、このスレッドに記載されているJMDNSといるライブラリで動かな
かったので、
> MulticastSocketクラスを使用したコードを記述しました。
> まぁ、それでもNGだったのですが。。。
> http://sourceforge.net/projects/jmdns/

少なくともJ2SEの感覚で利用すると駄目かもしれません。
丁寧にデバッグすることをお勧めします。

マルチキャストクラスは1.0からようやく導入されて、
API上は綺麗に利用できそうなのですが ....

実装レベルだと未実装のものがあったり、Exceptionが
発生したりと、J2SEと挙動が違うものが多々あります。

皆さん同様、こちらも試行錯誤です。

Keisuke Nakamura

未讀,
2009年12月27日 清晨7:52:252009/12/27
收件者:android-g...@googlegroups.com
今野さん。こんばんわ。

> より直接的な回答をすれば、下記がSSDPというマルチキャストベース仕様の
> 一部を、MulticastSocketクラスを利用した実装例になります。
>
> http://cgupnpjava.svn.sourceforge.net/viewvc/cgupnpjava/trunk/cyberlink/upnp-stack/src/main/java/org/cybergarage/upnp/ssdp/HTTPMUSocket.java?revision=118&view=markup

上記のソースコードを参考に、MDNSの受信部のソースを記述しましたが、
結果は同じでした。
有線環境はOK。無線環境はNG。
⇒receiveメソッドが応答しなくなる。

> 少なくともJ2SEの感覚で利用すると駄目かもしれません。
> 丁寧にデバッグすることをお勧めします。

ちょっと、時間がなく、丁寧にデバッグが出来ませんでした。orz...
年明けに、丁寧にデバッグしてみまっす。

回覆所有人
回覆作者
轉寄
0 則新訊息