connect静态方法

Future<SecureSocket> connect(
  1. dynamic host,
  2. int port,
  3. {SecurityContext? context,
  4. bool onBadCertificate(
    1. X509Certificate certificate
    )?,
  5. void keyLog(
    1. String line
    )?,
  6. List<String>? supportedProtocols,
  7. Duration? timeout}
)
override

构造一个新的安全客户端套接字,并将其连接到给定的host的端口port上。

返回的Future将在与SecureSocket建立连接并准备接收时完成。

使用保存在SecurityContext对象中的受信任证书集检查服务器提供的证书。默认的SecurityContext对象包含一组内置的受信任根证书,用于知名证书机构。

onBadCertificate是处理无法验证证书的可选处理程序。处理程序接收X509Certificate,可以检查它并决定(或让用户决定)是否接受连接。处理程序应返回true以继续SecureSocket连接。

keyLog是当与服务器交换新TLS密钥时将被调用的可选回调。每次调用时,keyLog都将接收由NSS密钥日志格式格式化的一行文本。将这些行写入文件将允许工具(如Wireshark)解密通过此套接字发送的内容。这旨在允许对安全套接字进行网络级调试,不应在生产代码中使用。例如

final log = File('keylog.txt');
final socket = await SecureSocket.connect('www.example.com', 443,
    keyLog: (line) => log.writeAsStringSync(line, mode: FileMode.append));

supportedProtocols是在与服务器进行ALPN协议协商时使用的协议的可选列表(按优先级降序排列)。示例值包括"http/1.1"或"h2"。可以通过SecureSocket.selectedProtocol获取选择的协议。

timeout参数用于指定建立连接的最大允许时间。如果timeout大于系统级超时持续时间,则超时可能比在timeout中指定的更早发生。在超时时,将抛出SocketException,并取消所有对host的正在进行中的连接尝试。

实现

static Future<SecureSocket> connect(host, int port,
    {SecurityContext? context,
    bool onBadCertificate(X509Certificate certificate)?,
    void keyLog(String line)?,
    List<String>? supportedProtocols,
    Duration? timeout}) {
  return RawSecureSocket.connect(host, port,
          context: context,
          onBadCertificate: onBadCertificate,
          keyLog: keyLog,
          supportedProtocols: supportedProtocols,
          timeout: timeout)
      .then((rawSocket) => new SecureSocket._(rawSocket));
}