gpt4 book ai didi

swift - 带 TLS 的 CFStream

转载 作者:行者123 更新时间:2023-11-28 06:10:41 30 4
gpt4 key购买 nike

是否可以通过 TLS 1.2 在 CFStream 上进行通信?如果是,最好的方法是什么?设置 SSLContext 还是设置 CFReadStreamSetProperty?不幸的是,我找不到任何例子。

最佳答案

这是我的代码,如果有人也在搜索这个:

var readStream: Unmanaged<CFReadStream>?
var writeStream: Unmanaged<CFWriteStream>?
var inputStream: InputStream!
var outputStream: OutputStream!

func connectToServer(host: String, port: Int, ssl: Bool=true) throws {
self.ssl = ssl

// Create StreamPair
CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, host as CFString, UInt32(port), &readStream, &writeStream)

// CFStreamCreatePairWithSocketToHost creates unmanaged CFReadStreams. So let's take the retained value
// we have to release those values!
inputStream = readStream!.takeRetainedValue()
outputStream = writeStream!.takeRetainedValue()

if ssl == true {
let dict = [
kCFStreamSSLValidatesCertificateChain: kCFBooleanFalse, // allow self-signed certificate
kCFStreamSSLLevel: "kCFStreamSocketSecurityLevelTLSv1_2" // don't understand, why there isn't a constant for version 1.2
] as CFDictionary

let sslSetRead = CFReadStreamSetProperty(inputStream, CFStreamPropertyKey(kCFStreamPropertySSLSettings), dict)
let sslSetWrite = CFWriteStreamSetProperty(outputStream, CFStreamPropertyKey(kCFStreamPropertySSLSettings), dict)

if sslSetRead == false || sslSetWrite == false {
throw ConnectionError.sslConfigurationFailed
}
}

// set the delegate of the streams
inputStream.delegate = self
outputStream.delegate = self

// schedule the streams for the runLoop
inputStream.schedule(in: .current, forMode: .commonModes)
outputStream.schedule(in: .current, forMode: .commonModes)

// open the streams
inputStream.open()
outputStream.open()
}

关于swift - 带 TLS 的 CFStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46785057/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com