【问题标题】:Client-server application with Swift and C++使用 Swift 和 C++ 的客户端-服务器应用程序
【发布时间】: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


    【解决方案1】:

    嗯,看来问题出在服务器端。此代码完美运行。我的错:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多