我试图使用NSInputStream来使用TCP套接字连接接收数据。在服务器端,我在发送数据本身之前先发送数据大小。在iOS客户端,我需要从NSInputStream中提取前4个字节,因为我需要检查数据大小是否已经完全接收到,但是我有一个问题:
...
case NSStreamEvent.HasBytesAvailable:
if ( aStream == inputstream){
while (inputstream.hasBytesAvailable){
var readBufferRef = UnsafeMutablePointer<UnsafeMutablePointer<UInt8>>()
var readBufferLengthRef = 0
let readBufferIsAvailable = inputstream.getBuffer(readBufferRef, length: &readBufferLengthRef)
...
}
}
break在接收到数据之后,readBufferLengthRef总是等于0。
怎么可能呢?
如何获得NSInputStream缓冲区的大小?
UPD:
代码:
case NSStreamEvent.HasBytesAvailable:
NSLog("HasBytesAvaible")
var buffer = [UInt8](count: 1024, repeatedValue: 0)
if ( aStream == inputstream){
while (inputstream.hasBytesAvailable){
var readBufferRef: UnsafeMutablePointer<UInt8> = nil
var readBufferLengthRef = 0
let readBufferIsAvailable = inputstream.getBuffer(&readBufferRef, length: &readBufferLengthRef)
//debugger: readBufferLengthRef = (int)0
}
}
break发布于 2016-10-14 14:40:12
在您的代码中,readBufferRef被定义为“指向指针的指针”,但从未分配,因此它是空指针。
您应该做的是将UnsafeMutablePointer<UInt8>的地址作为inout参数传递给函数(假设Swift 2):
var readBufferRef: UnsafeMutablePointer<UInt8> = nil
var readBufferLengthRef = 0
let readBufferIsAvailable = inputStream.getBuffer(&readBufferRef, length: &readBufferLengthRef)返回时,readBufferRef设置为流的读缓冲区(在下一次读取操作之前有效),readBufferLengthRef包含可用字节数。
https://stackoverflow.com/questions/40045665
复制相似问题