TsgcSTUNClient コンポーネント。
TsgcSTUNClientは、STUNプロトコルを実装するクライアントであり、STUNサーバーへbinding要求を送信できます。
このコンポーネントでは UDP と TCP をトランスポートとして使用できます。UDP をトランスポートとして使用する場合、短時間後にレスポンスが届かないときにリクエストを再送する再送メカニズムを実装しています。
通常、STUNサーバーはUDPポート3478で実行され、認証を必要としません。そのため、STUN request bindingを送信するには、クライアントが接続先を知ることができるようサーバープロパティを設定し、コンポーネントがサーバーから応答を受信するイベントを処理してください。
サーバーの設定
SendRequest メソッドを呼び出して、STUN サーバーへのリクエストバインディングを送信します。
イベントの処理
サーバーが成功応答を返した場合、イベントOnSTUNResponseSuccessが呼び出され、aBindingオブジェクトを読み取ることでバインディング情報にアクセスできます。
oSTUN := TsgcSTUNClient.Create(nil);
oSTUN.Host := 'stun.sgcwebsockets.com';
oSTUN.Port := 3478;
oSTUN.SendRequest;
procedure OnSTUNResponseSuccess(Sender: TObject; const aSocket: TsgcSocketConnection;
const aMessage: TsgcSTUN_Message; const aBinding: TsgcSTUN_ResponseBinding);
begin
DoLog('Remote IP: ' + aBinding.RemoteIP + '. Remote Port: ' + IntToStr(aBinding.RemotePort));
end;
procedure OnSTUNResponseError(Sender: TObject; const aSocket: TsgcSocketConnection;
const aMessage: TsgcSTUN_Message; const aError: TsgcSTUN_ResponseError);
begin
DoLog('Error: ' + IntToStr(aError.Code) + ' ' + aError.Reason);
end;