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 安全层(默认已启用)。 |
| QUICOptions | QUIC 传输的客户端调优选项。 |
| 名称 | 描述 |
|---|---|
| Connect | 打开与服务器的 QUIC 连接,并等待直至连接建立或超时。 |
| Disconnect | 关闭与服务器的 QUIC 连接。 |
| WriteData | 通过默认 QUIC 流向服务器发送数据。 |
| OpenStream | 打开新的 QUIC 流并将其返回,以便通过它发送数据。 |
| 名称 | 描述 |
|---|---|
| OnQUICConnect | 客户端成功连接到 QUIC 服务器后立即触发。 |
| OnQUICDisconnect | QUIC 连接关闭时触发。 |
| OnQUICException | QUIC 连接上引发异常时触发。 |
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;