TsgcQUICClient

TsgcQUICClient 是一个低级 QUIC 客户端(RFC 9000),用于向服务器打开 QUIC 连接并通过 QUIC 流交换数据。

简介

TsgcQUICClient 是一个低级 QUIC 客户端,实现了 RFC 9000 中定义的传输协议。它向服务器打开 QUIC 连接并通过 QUIC 流交换数据,基于 OpenSSL 3.5 或更高版本提供的 QUIC 实现构建。按照以下步骤配置该组件:

该库可以通过两种引擎之一驱动 QUIC,引擎跟随 SSLQUICOptions.IOHandler:默认的 iohOpenSSL 在可用时使用内置的 OpenSSL QUIC 引擎(qmBuiltin),否则回退到 sgc 引擎(qmCustom);iohNativeTLS 则始终使用 sgc 引擎,握手运行在原生 TLS 引擎上,同样支持会话票据、会话恢复和 0-RTT。两种引擎下 EnableMultiStream、OpenStream 和 WriteStreamData 均可使用。参阅 QUIC 了解引擎对比。

1. 创建 TsgcQUICClient 组件的新实例,并设置 QUIC 服务器的 Host 和 Port。

2. 处理 OnQUICConnect 事件,通过将 Active 设为 True 打开连接,并使用 WriteData 发送数据。示例:


    oClient := TsgcQUICClient.Create(nil);
    oClient.Host := 'www.example.com';
    oClient.Port := 443;
    oClient.SSLQUIC := True;
    oClient.OnQUICConnect := OnQUICConnectEvent;
    oClient.Active := True;

    oClient.WriteData('Hello QUIC');

    procedure OnQUICConnectEvent(Sender: TObject; const
        Connection: TsgcQUICConnectionClient);
    begin
      ShowMessage('Connected to QUIC server');
    end;

参考

关键属性

名称描述
Active打开或关闭到远程服务器的 QUIC 连接。
Host客户端将连接到的 QUIC 服务器的 IP 地址或 DNS 名称。
Port用于连接到 QUIC 服务器的 UDP 端口。
SSLQUIC启用 QUIC 所需的 TLS 1.3 安全层(默认已启用)。
QUICOptionsQUIC 传输的客户端调优选项。

关键方法

名称描述
Connect打开与服务器的 QUIC 连接,并等待直至连接建立或超时。
Disconnect关闭与服务器的 QUIC 连接。
WriteData通过默认 QUIC 流向服务器发送数据。
OpenStream打开新的 QUIC 流并将其返回,以便通过它发送数据。

关键事件

名称描述
OnQUICConnect客户端成功连接到 QUIC 服务器后立即触发。
OnQUICDisconnectQUIC 连接关闭时触发。
OnQUICExceptionQUIC 连接上引发异常时触发。

完整示例


oClient := TsgcQUICClient.Create(nil);
oClient.Host := 'www.example.com';
oClient.Port := 443;
oClient.SSLQUIC := True;
oClient.OnQUICConnect := OnQUICConnectEvent;
oClient.OnQUICDisconnect := OnQUICDisconnectEvent;
oClient.OnQUICException := OnQUICExceptionEvent;

if oClient.Connect then
begin
  oClient.WriteData('Hello QUIC');
  oClient.Disconnect;
end;

procedure OnQUICConnectEvent(Sender: TObject; const Connection: TsgcQUICConnectionClient);
begin
  Log('connected');
end;

procedure OnQUICDisconnectEvent(Sender: TObject; const Connection: TsgcQUICConnectionClient; const Code: Integer);
begin
  Log('disconnected, code ' + IntToStr(Code));
end;

procedure OnQUICExceptionEvent(Sender: TObject; E: Exception);
begin
  Log('error: ' + E.Message);
end;

系统要求