안드로이드 개발 질문/답변
(글 수 45,052)
PC클라이언트와 Android클라이언트간의 홀펀칭을 시도하고있습니다.
http://lshsblog.blogspot.kr/2011/04/hole-punching_18.html
위 논문을 참고하여 홀펀칭을 구현하였는데요.
현재 같은 NAT아래에서의 홀펀칭과 안드로이드폰이 3g로 접속했을시 홀펀칭은 잘 되고있습니다.
그런데 서로 다른 NAT에 물려있을때 (안드로이드폰이 다른 와이파이에 접속했을때)는 홀펀칭이 실패합니다.
제 홀펀칭 방식은 아래와 같습니다.
0.UDP통신기반
1.클라이언트 A와 클라이언트 B 서버C는 각각 바인딩을 합니다.
2.클라이언트 A,B는 각각 자신의 내부IP와 포트번호를 서버C에게 전송합니다,
3.서버C는 A의 내부IP와 외부IP를 B에게
B의 내부IP와 외부IP를 A에게 보냅니다
이때 내부IP는 각 클라이언트가 보내온 정보로 확인하고 외부IP는 클라이언트가 접속할때의 SOCKADDR_IN정보로 확인합니다.
4.클라이언트 A,B는 번갈아가며 서로의 외부IP와 내부IP에 패킷을 전송합니다.
5.안드로이드 폰에서 패킷을 받는데 성공한다면 홀펀칭과정을 종료하고 성공이벤트.
6.10번이상 패킷을 보냈는데도 못받으면 실패
이와같은 방식으로 하여 3g에서는 확인이 되었습니다.
왜 wifi에서 안되는지;;;
nat 타입을 확인해보세요 . nat type중에 홀펀칭이 불가능한것도 있습니다.