使用Swift和c++的客户机-服务器应用程序



我正在尝试创建简单的应用程序,用于在客户端(Swift, iOS)和服务器(c++, Windows)之间传输数据。我想使用套接字来传输数据。所以我有相当多的工作服务器(我可以连接到它,使用c++客户端),但当我试图连接到它与Swift的NSStream -我得到了错误。也许我错过了什么?c++服务器在Windows和iOS之间使用套接字连接的规则是什么?

所以过了一段时间后,我在我的客户端上得到了"erroroccurred"消息。下面是我连接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
      }

    } 
 }

看来,问题出在服务器端。这段代码可以完美地工作。是我的错

相关内容

最新更新