如何在swift中从套接字接收文件并将其转换为swift protobuf?
首先,我正在使用IBM的蓝色插槽。
我尝试以String格式接收protobuf的大小,然后将其转换为int,然后打开一个从服务器获取的大小的缓冲区。
问题是套接字无法填充应有大小的数据。
如何制作固定大小的数据(以字符串格式获取的大小),然后等待它充满数据然后转换为protobuf?
还有其他方法吗?
答案 0 :(得分:0)
好好几个月和几天的时间研究这个东西之后,我发现正确的方法了,而且不是通过套接字来实现的。
要向服务器发送和接收protobuf,他们有一个叫做BinaryDelimited的东西。
要从服务器接收protobuf,您将使用:
BinaryDelimited.parse(messageType: ProtoFile.self, from: inputStream )
ProtoFile.self是您编译的自定义protobuf类。
要将protobuf发送到服务器,您将使用:
BinaryDelimited.serialize(message: proto, to: outputStream)
并初始化输入和输出,并使用
将其连接到服务器var inputStream : InputStream!
var outPutStream : OutputStream!
func setupNetworkCommunication() {
var readStream: Unmanaged<CFReadStream>?
var writeStream: Unmanaged<CFWriteStream>?
CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault,
"localhost" as CFString,
port,
&readStream,
&writeStream)
inputStream = readStream!.takeRetainedValue()
outputStream = writeStream!.takeRetainedValue()
inputStream.delegate = self
outputStream.delegate = self
inputStream.schedule(in: .main, forMode: .common)
outputStream.schedule(in: .main, forMode: .common)
inputStream.open()
outputStream.open()
}