안녕하세요.
홀펀칭을 구현하다가 막힌 부분이 발생되어서 염치 불구하고 질문 드립니다.
현재 구조는 이렇습니다.
랑데뷰서버 또는 STUN 서버역할을 하는 가칭 [SERVER]가 있습니다.
그리고 각기 아이피 대역이 다른 NAT 밑에 있는 [A] Client와 [B] Client 가있습니다.
[SERVER]를 통하여 [A]를 홀펀칭하고 [B]가 [A]와 P2P 통신을 하도록 하려 합니다.
시나리오
1. [SERVER]와 [A]의 통신
[SERVER]는 공인 아이피에 존재하며 NAT 밑에 있지 않습니다.
따라서 NAT 밑에있는 [A]가 UDP 패킷을 [SERVER]에 보냅니다.
이때 [SERVER]는 [A]의 NAT 포트를 획득합니다.
2. [SERVER]와 [B]의 통신
[B]는 [SERVER]에게 [A]의 아이피 주소와 NAT 포트를 획득합니다.
3. [B] -> [A] 통신
-- 현재 봉착된 문제
[A]의 아이피 주소와 NAT 포트를 알고있음에도 UDP 패킷을 보내도 [A]가 수신을 하지 못하고있습니다.
혹시 제가 UDP 홀펀칭을 잘못 이해하고있는지, 혹은 뭔가 핵심을 빠뜨린게 있는지 조언을 주시면 감사하겠습니다.
오랜만에 프로그래밍 갤러리에 나타나 불현듯 질문을 올려 불쾌감을 드린 다른 갤러분들껜 죄송한 말씀드립니다.
아무쪼록 모든 분들이 칼퇴신의 가호를 받아 칼퇴 할 수 있도록 기원 드리겠습니다.
Berrzeb. // 네, [SERVER]는 클라이언트가 접속하면 해당 클라이언트의 NAT 포트를 에코하도록 했어요. A ->Server->B 이것의 의미는 A의 포트를 B에게 알려줬냐 이 의미신거죠?? 이부분도 처리되어있어요..
연결될때까지 대기타야 할텐데....스레드 열어서... 랑데뷰 서버가 a한테는 b의 주소-포트를 2개 알려주고 b한테도 마찬가지로 a의 주소-포트 2개를 날려주면 a, b모두 연결 요청 날리면 한쪽은 실패하고 다른 한쪽은 실패한 놈이 뚫어놓은 세션에 연결됨.