私は、2つのデバイスとのP2P通信を必要とするモバイルプロジェクトを行っています。
そして、私は問題に直面しました。(スマートフォンにパブリックIPが設定されていることはまれです)
私はいくつかの答えを見つけました。「UDPホールパンチング」です。
私は「UDPホールパンチング」について100%概念的に理解していて、いくつかのコードを書いていると思います。しかし、それは機能しません。
これが私の状況です。
Device A connected NAT(A) for Wi-Fi.
Device B connected NAT(B) for Wi-Fi.
NAT(A) and NAT(B) is different one.
Relay Server S bind socket and waiting for devices. (S is WebServer but Network Status is good.)
At the first, A and B send dummy packet to S. Then S save UniqueID(to tell A and B), Public IP, Port.
And S send information to each device A and B.
Like this:
- IP Address and Port Number about A. -> send to B
- IP Address and Port Number about B. -> send to A
Now A and B send UDP packet to other device based on information(IP Address and Port Number) from S.
(15 per second. using same socket that used server-device session)
しかし、それは機能していません。(実際には断続的に動作します。おそらく10回に1回ですか?そしてなぜ成功と失敗のかわかりません。小さな共通の関係はありません。)
NATタイプの問題ではないと思います。私は韓国をテストしましたが、韓国の90%NATは対称錐ではありません。