Delphi STUN 클라이언트
타입이 지정된 STUN(RFC 8489) 클라이언트로 NAT 뒤의 리플렉시브 엔드포인트를 탐색하세요. ICE 후보 수집과 WebRTC의 부트스트랩 단계로 사용됩니다.
타입이 지정된 STUN(RFC 8489) 클라이언트로 NAT 뒤의 리플렉시브 엔드포인트를 탐색하세요. ICE 후보 수집과 WebRTC의 부트스트랩 단계로 사용됩니다.
STUN 클라이언트 — 바인딩 요청, XOR-MAPPED-ADDRESS 추출, MESSAGE-INTEGRITY / FINGERPRINT 지원, RFC 8489에 따른 재전송 타이머.
TsgcSTUNClient
Windows, macOS, Linux, iOS, Android
Standard / Professional / Enterprise
STUN 서버 호스트와 포트를 설정하고 SendRequest를 호출한 뒤, OnSTUNResponseSuccess에서 aBinding.RemoteIP와 aBinding.RemotePort를 읽으세요.
uses
sgcP2P, sgcP2P_STUN_Classes, sgcSocket_Classes;
// TFormSTUN은 FClient: TsgcSTUNClient와 FLog: TStringList를 보유
procedure TFormSTUN.Discover;
begin
FClient := TsgcSTUNClient.Create(nil);
FClient.Host := 'stun.l.google.com';
FClient.Port := 19302;
FClient.OnSTUNResponseSuccess := OnSTUNResponseSuccess;
FClient.SendRequest;
end;
procedure TFormSTUN.OnSTUNResponseSuccess(Sender: TObject;
const aSocket: TsgcSocketConnection;
const aMessage: TsgcSTUN_Message;
const aBinding: TsgcSTUN_ResponseBinding);
begin
// RemoteIP와 RemotePort에 서버가 확인한 XOR-MAPPED-ADDRESS가 담김
FLog.Add('public: ' + aBinding.RemoteIP + ':' +
IntToStr(aBinding.RemotePort));
end;
// includes: sgcP2P.hpp, sgcP2P_STUN_Classes.hpp
TsgcSTUNClient *Client = new TsgcSTUNClient(this);
Client->Host = "stun.l.google.com";
Client->Port = 19302;
Client->OnSTUNResponseSuccess = OnSTUNResponseSuccess;
Client->SendRequest();
ICE에서 사용하는 메시지 무결성 및 지문 확장 기능을 갖춘 타입 지정 RFC 8489 STUN 클라이언트입니다.
SendRequest는 STUN 0x0001 Binding 메시지를 Host / Port로 전송하고, SendBindingRequest(host, port)는 같은 소켓으로 다른 서버에 질의합니다. 응답은 XOR-MAPPED-ADDRESS가 이미 파싱된 상태로 OnSTUNResponseSuccess에 도착합니다.
STUNOptions.Authentication.Credentials를 stauShortTermCredential 또는 stauLongTermCredential로 설정하고 Username과 Password를 채우면 컴포넌트가 MESSAGE-INTEGRITY를 계산합니다. 렐름과 논스는 401 챌린지에서 가져옵니다.
UDP를 통한 STUN은 애플리케이션 계층 재전송이 필요합니다. RetransmissionOptions.RTO와 MaxRetries가 RFC 8489 §6.2.1 백오프를 제어하고, 타이밍을 직접 관리한다면 Enabled로 끌 수 있습니다.
XOR-MAPPED-ADDRESS는 두 패밀리 중 하나로 반환됩니다. 컴포넌트는 두 가지를 모두 디코딩해 텍스트 형식을 aBinding.RemoteIP로 전달하고, 패밀리는 aBinding.IPVersion에 담깁니다.
여러 STUN 서버에 여러 TsgcSTUNClient 인스턴스를 사용하여 서버 리플렉시브 ICE 후보를 수집하세요 — 로컬 인터페이스당 하나씩입니다.
내부적으로 TsgcUDPClient를 사용하며, Transport := stunTCP로 설정하면 TCP 경로로 전환됩니다. GetLocalSocketBinding은 그 소켓의 전송 주소를 반환하는데, 해당 소켓으로 수집한 모든 후보가 공유하는 RFC 8445의 base입니다.
컴포넌트 레퍼런스로 바로 이동하고, 실행 가능한 데모 프로젝트를 받아보세요.
| 온라인 도움말 — TsgcSTUNClient 이 컴포넌트의 전체 속성, 메서드 및 이벤트 레퍼런스입니다. | 열기 | |
| 데모 프로젝트 — Demos\35.P2P\02.STUN 실행 가능한 예제 프로젝트입니다. sgcWebSockets 패키지에 포함되어 있습니다. | 열기 | |
| 기술 문서 (PDF) Delphi 및 C++ Builder용 코드 샘플과 기능 설명이 포함된 기술 문서입니다. | 열기 | |
| 사용자 매뉴얼 (PDF) 라이브러리의 모든 컴포넌트를 다루는 종합 매뉴얼입니다. | 열기 |