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에서 안되는지;;;