如何在 Swift 中通过 tcp 套接字读取字符串
How to read in a string over tcp socket in Swift
如果我有一个 java tcp 服务器发送一些文本,我如何从 NSInputStream
读取该文本并将其存储在一个字符串中?
这是我的一段代码,但我不太确定如何从这里获取字符串:
NSStream.getStreamsToHostWithName(addr, port: port, inputStream: &inp, outputStream: &out)
let inputStream = inp!
let outputStream = out!
inputStream.open()
outputStream.open()
var readByte :UInt8 = 0
while inputStream.hasBytesAvailable {
inputStream.read(&readByte, maxLength: 1)
}
使用您的代码,您每次在循环中只能读取 1 个字节。如果你需要读取所有数据,你可以这样做,例如:
NSStream.getStreamsToHostWithName(addr, port: port, inputStream: &inputStream, outputStream: &outputStream)
inputStream!.open()
outputStream!.open()
let queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
dispatch_async(queue) {
let bufferSize = 1024
var inputBuffer = Array<UInt8>(count:bufferSize, repeatedValue: 0)
while true {
let bytesRead = self.inputStream!.read(&inputBuffer, maxLength: bufferSize)
// Here get string from byte Array
let responseString = NSString(bytes: inputBuffer, length: inputBuffer.count, encoding: NSUTF8StringEncoding) as! String
println("Data from Stream = \(responseString)")
}
}
这里是这一行:
let responseString = NSString(bytes: inputBuffer, length: inputBuffer.count, encoding: NSUTF8StringEncoding) as! String
从输入字节数组
创建String
看看这些很棒的 库,它们会拯救你的生命。
Swift:
Starscream
Objective-C:
Jetfire
SocketRocket
如果我有一个 java tcp 服务器发送一些文本,我如何从 NSInputStream
读取该文本并将其存储在一个字符串中?
这是我的一段代码,但我不太确定如何从这里获取字符串:
NSStream.getStreamsToHostWithName(addr, port: port, inputStream: &inp, outputStream: &out)
let inputStream = inp!
let outputStream = out!
inputStream.open()
outputStream.open()
var readByte :UInt8 = 0
while inputStream.hasBytesAvailable {
inputStream.read(&readByte, maxLength: 1)
}
使用您的代码,您每次在循环中只能读取 1 个字节。如果你需要读取所有数据,你可以这样做,例如:
NSStream.getStreamsToHostWithName(addr, port: port, inputStream: &inputStream, outputStream: &outputStream)
inputStream!.open()
outputStream!.open()
let queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
dispatch_async(queue) {
let bufferSize = 1024
var inputBuffer = Array<UInt8>(count:bufferSize, repeatedValue: 0)
while true {
let bytesRead = self.inputStream!.read(&inputBuffer, maxLength: bufferSize)
// Here get string from byte Array
let responseString = NSString(bytes: inputBuffer, length: inputBuffer.count, encoding: NSUTF8StringEncoding) as! String
println("Data from Stream = \(responseString)")
}
}
这里是这一行:
let responseString = NSString(bytes: inputBuffer, length: inputBuffer.count, encoding: NSUTF8StringEncoding) as! String
从输入字节数组
创建String
看看这些很棒的 库,它们会拯救你的生命。
Swift: Starscream
Objective-C: Jetfire SocketRocket