我的应用程序应该能够使用Stream-class从服务器接收消息。
我的代码是:
var inputStream : InputStream? = nil
var outputStream : OutputStream? = nil
...
func establishConnection() {
...
Stream.getStreamsToHost(withName: "app.mybusiness.com", port: port, inputStream: &self.inputStream, outputStream: &self.outputStream)
...
}
func stream(_ someStream: Stream, handle eventCode: Stream.Event) {
switch eventCode {
case Stream.Event.hasBytesAvailable:
var output = ""
var buffer = [UInt8](repeating: 0, count: 1024)
while (self.inputStream!.hasBytesAvailable){
let bytesRead:Int=inputStream!.read(&buffer, maxLength: buffer.count)
if (bytesRead > 0) { // had here (bytesRead >= 0) too
output += NSString(bytes: UnsafePointer(buffer), length: bytesRead, encoding:String.Encoding.utf8.rawValue)! as String
} else {
print("# error")
}
print("> \(output)")
}
// Now do something with the data we got
HelpMethods.pushServerIncoming(inString: output)
default:
...
}
}
所以这很好用,但有时它似乎停止接收数据 它读取前1024个字节,然后是第二个1024,而不是继续(需要大约3或4次迭代才能获得整个消息)它只读取几个字节,然后inputStream.hasBytesAvailable返回false。
很容易说:啊,这就是服务器的错误,但这个问题不会发生在应用程序的android版本中。
我尝试更改缓冲区大小(从1到4096),但它没有改变任何东西。有4096个字节,我有一个案例,在第一次运行中流只读取几百个字节,然后说:所有做好友!没事了......
行为不可预测。多次使用相同的消息测试它,它工作,工作,工作,不起作用,......
有什么建议吗?