簡體   English   中英

使用Swift和C ++的客戶端-服務器應用程序

[英]Client-server application with Swift and C++

我正在嘗試創建用於在客戶端(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
      }



    } 

 }

好吧,看來問題出在服務器端。 此代碼完美地工作。 我的錯 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM