2017/04/02

[esp8266]ESP-TOUCHのしくみ (3)

"android udp tethering"などのキーワードで検索すると、port forwardingのことがよく出てきた。
adb forwardコマンドでできると書いてあるので、何も考えずにやってみたが、やはりダメ。

 

android - UDP packets between WiFi-tethered device and WiFi tether provider? - Stack Overflow
単にばらまきたいだけだったのだが、そういえば作りとしては"234.xx.xx.xx"に送信しようとしていた。。。
Androidが取得しているIPアドレスは、"10.xx.xx.xx"みたいな番号なので、マスクで止められたのだろうか?
いや、それだったら、うまくいっているときは"192.168.xx.xx"みたいな番号だから、違うといえば違う。

 

えーっと、IPアドレスのクラスCは、192.0.0.X~223.255.255.Xまでらしい(入社時に購入した古い本より)。
じゃあ、234.xx.xx.xxはクラスCじゃないやん。
その次のクラスDは、224.0.0.0~239.255.255.255とのこと。
この中には入っている。
そして、クラスDはIPマルチキャスト用らしい。

 

5. IPマルチキャスト | TECHSCORE(テックスコア)
MulticastSocketというクラスがあるそうだ。
MulticastSocket | Android Developers
sending and receiving、と書いてあるけど、SmartConfigアプリには使われていないのだよなぁ。
とりあえず置き換えてみよう。
ちっ、DatagramSocketはSocketExceptionなのに、MulticastSocketはIOExceptionなのか。
そして、変更したが動かない。。。

 

http://stackoverflow.com/questions/6550618/multicast-support-on-android-in-hotspot-tethering-mode
setNetworkInterface()で送信対象のインターフェースを指定せよ、という回答が出てきた。
はいはい、やればいいんでしょう、やれば。。。

あ、送信された!

 

じゃあ、あとはBSSIDを取得するだけか。
http://stackoverflow.com/questions/33159224/getting-mac-address-in-android-6-0
うーん、取得はできたが、設定画面に表示されているWiFi MACアドレスと違う。。。
が、動かすと、ESP8266と通信できて、Nexus5のIPアドレス取得はできていないが、自分のIPアドレスはとれているから、うまくいったんじゃなかろうか。

 

使う人はいないと思うが、githubに上げておこう。
AndroidManifestなんかは、ほぼimportしたままになっているので、うまいことやっておくれ。
https://github.com/hirokuma/Esp8266SmartConfigTether

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。