클라이언트가 TCP를 사용하여 서버에 연결하고 TCP/텍스트 채팅/채팅 룸 기능이 TCP로 수행되는 클라이언트 - 서버 음성 채팅 프로그램 (관리되지 않는 C++, win32)을 수행하는 동안 모든 audi 전송이 별도의 UDP/RTP 소켓 (JRTPLIB의 API 사용).C++ 홀 펀칭 UDP (RTP)
따라서 IP는 TCP 연결에서 알 수 있으며 연결이 설정된 후 RTP 소켓의 포트 번호를 보낼 수 있습니다.
문제는 TCP에서는 연결을 설정 한 후 서버에서 포트 포워딩을 수행해야하며 UDP에서는 recvfrom()을 사용해야합니다. afaik는 포트가 필요합니다. (멀티 플레이 게임이나 VoIP 클라이언트를 볼 때 필요하지 않습니다.)
UDP 홀 펀칭에 대해 이야기하는 출처 (예 : http://en.wikipedia.org/wiki/UDP_hole_punching)를 읽는 것은 좋지 않습니다. 예를 들어 그들은 서버와의 udp 대화 시작을 계속 언급합니다. 그것이 사실입니다. 클라이언트가 포트를 열지 않고도 서버와 udp 대화를 실제로 시작하려면 어떻게해야합니까? TCP에서 내가 언급했듯이()을 서버에 연결하면 통신이 가능합니다.
또한 UDP에서 RTP 빌드를 알고 있지만 UDP와 다른 RTP 구멍 펀칭 (다시, JRTPLIB 사용)에 대해 알아야 할 사항이 있습니까?
미리 감사드립니다.
다소 혼란 스럽습니다. UDP 구멍 펀칭은 NAT 통과에 대해 수행됩니다. 즉, 피어 투 피어에 연결해야하고 두 피어가 개인 네트워크 (또는 라우터)에 앉아있을 때입니다. 이 서버는 두 클라이언트를 '매치 메이킹'하는 방법으로 만 사용됩니다. 그게 당신이하려는 일 이니? – zebrabox
클라이언트가 포트를 열지 않고도 서버에 연결된 클라이언트간에 UDP/RTP 연결을 시도하고 있습니다. 내가 이해하는 바와 같이, 클라이언트는 IP/포트를 서버와 교환하고 클라이언트간에 직접 공유하여 서로 통신 할 수 있습니다. – KaiserJohaan
"포트를 여는 것"은 무엇을 의미합니까? 의사 소통을 위해 열리는 항구가 있어야합니다, 그것은 udp hole punching이하는 일입니다. – nos