简体   繁体   中英

Client-server application with Swift and C++

I'm trying to create simple application for transferring data between client(Swift, iOS) and server (C++, Windows). I want to use sockets to transfer data. So i have pretty-much working server (i can connect to it, using c++ client), but when i try to connect to it with Swift's NSStream - i got error. Maybe i'm missing something? What is the rules to use socket connection between c++ server on Windows and iOS.

So after some time, i got "ErrorOccured" message on my client. Here's my code to connect with 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
      }



    } 

 }

Well, it seems, that problem was on server side. This code works perfectly. My fault :)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM