質問: andtoid端末でグローバルipを用いてudpパケットの通信を行うアプリを作成しています。現状はローカルipを利用したローカル環境では端末間のパケットの通信はできています。しかし、グローバル間だとパケットを受け取ることができません。コードは以下を参考にしています。 ルータのポートマッピング(ポート解放)、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で起動している上記サンプルプログラムのサーバで受信できたため。
回答: 詳しい原因は分からないですが以下の結果になりました。 ・送受信失敗 -グローバルip指定 端末a-- (Wi-Fi) -- ルータa -- (インターネット) -- ルータa -- (Wi-Fi) -- 端末a ・送受信成功 -グローバルip指定 端末a-- (Wi-Fi) -- ルータa -- (インターネット) -- ルータa -- (Wi-Fi) -- 端末b -ローカルip指定 端末a-- (Wi-Fi) -- ルータa -- (Wi-Fi) -- 端末a 端末a-- (Wi-Fi) -- ルータa -- (Wi-Fi) -- 端末b まずはじめに、自分の端末で送受信できるかと考えていたので、どつぼにはまってました。 コメントをしてくださった、masmさん、sayuriさんありがとうございます。