【发布时间】:2015-12-04 22:27:13
【问题描述】:
我正在尝试创建用于在客户端(Swift、iOS)和服务器(C++、Windows)之间传输数据的简单应用程序。我想使用套接字来传输数据。所以我有相当多的工作服务器(我可以连接到它,使用 c++ 客户端),但是当我尝试使用 Swift 的 NSStream 连接到它时 - 我得到了错误。也许我错过了什么?在 Windows 和 iOS 上的 c++ 服务器之间使用套接字连接的规则是什么。
所以过了一段时间,我的客户端收到了“ErrorOccured”消息。 这是我连接 NSStream 的代码:
let SERVER_IP: String = "MY_SERVER_IP"
let SERVER_PORT: Int = MY_PORT
class ViewController: UIViewController, NSStreamDelegate {
var inputStream: NSInputStream? = nil
var outputStream: NSOutputStream? = nil
override func viewDidLoad() {
super.viewDidLoad()
NSStream.getStreamsToHostWithName(SERVER_IP, port: SERVER_PORT, inputStream: &inputStream, outputStream: &outputStream)
if inputStream != nil && outputStream != nil {
inputStream!.delegate = self
outputStream!.delegate = self
inputStream!.scheduleInRunLoop(.mainRunLoop(), forMode: NSDefaultRunLoopMode)
outputStream!.scheduleInRunLoop(.mainRunLoop(), forMode: NSDefaultRunLoopMode)
inputStream!.open()
outputStream!.open()
}
}
func stream(aStream: NSStream, handleEvent eventCode: NSStreamEvent) {
switch (eventCode){
case NSStreamEvent.ErrorOccurred:
NSLog("ErrorOccurred")
break
case NSStreamEvent.EndEncountered:
NSLog("EndEncountered")
break
case NSStreamEvent.None:
NSLog("None")
break
case NSStreamEvent.HasBytesAvailable:
NSLog("HasBytesAvaible")
var buffer = [UInt8](count: 4096, repeatedValue: 0)
if ( aStream == inputStream) {
while (inputStream!.hasBytesAvailable){
var len = inputStream!.read(&buffer, maxLength: buffer.count)
if(len > 0){
var output = NSString(bytes: &buffer, length: buffer.count, encoding: NSUTF8StringEncoding)
if (output != ""){
NSLog("server said: %@", output!)
}
}
}
}
break
case NSStreamEvent.allZeros:
NSLog("allZeros")
break
case NSStreamEvent.OpenCompleted:
NSLog("OpenCompleted")
break
case NSStreamEvent.HasSpaceAvailable:
NSLog("HasSpaceAvailable")
break
default:
break
}
}
}
【问题讨论】:
标签: c++ swift sockets client-server nsstream