android端末でのudp通信につきまして
andtoid端末でグローバルipを用いてudpパケットの通信を行うアプリを作成しています。現状はローカルipを利用したローカル環境では端末間のパケットの通信はできています。しかし、グローバル間だとパケットを受け取ることができません。コードは以下を参考にしています。
https://systembash.com/a-simple-java-udp-server-and-udp-client/
ルータのポートマッピング(ポート解放)、android端末の静的ipの割当は行っています。
ちなみに、上記プログラムをpcで動かした場合はグローバル間で通信はできました。
コードの誤り以外で、環境面などで見落としていることは何かあるでしょうか、ご教授お願いします。
以下、私の環境です。
携帯端末:Zenfone 2
Androidのバージョン:6.01(APIレベル23)
セキュリティアプリ:security master
ルータ:IODATA(WN-AG450DGR)
補足
masmさんの仰るように端末とルータの接続は以下の通りです。
端末 -- (Wi-Fi) -- ルータ -- (インターネット) -- ルータ -- (Wi-Fi) -- 端末
グローバルipとポート番号を指定して、通信をさせる予定です。
ネットワーク監視アプリ(net swiss tool free)でポートの状況を調べたところ、ローカルipを使用したときには問題ないですが、グローバルipを使用したときはポートがクローズされている状況です。
sayuriさん
双方向です。両端末でパケットの送信と受信スレッドを別々に動かしています。現在はローカルipを使用したときのパケット通信は正常に動いています
以下の点は確認しています。
・ポート番号のかぶりはない
・指定している、ip、ポート番号は間違っていない
・AndroidmManifest.xmlにネットワークを扱うinternetのパーミッションはあたえている
masmさん
portがクローズされていると判断したのは以下の結果のためです
ローカルip指定時:
portscan tcp(ルータでtcpも解放している)
→結果がopened
udp flood
→アプリ動作
グローバルip指定時:
portscan tcp
→closed
udp flood
→アプリ動作しない
※このネットワーク監視アプリを使ってグローバルipを利用して、pcで起動している上記サンプルプログラムのポートに対してudp floodしたところ、正常に動きました。
補足2
グローバルipを指定したパケットの送信側は正常にできています。
※作成中のアプリからpcで起動している上記サンプルプログラムのサーバで受信できたため。