【问题标题】:How to connect an iOS Swift application to a hardware device using socket programming?如何使用套接字编程将 iOS Swift 应用程序连接到硬件设备?
【发布时间】:2017-11-26 15:58:12
【问题描述】:

我想使用套接字编程将我的 Swift 应用程序连接到网络硬件设备。服务器端编程已经使用 C 语言在硬件设备中完成。如何使用套接字编程与设备连接和通信?我应该选择哪个库?

【问题讨论】:

    标签: ios swift sockets tcp socket.io


    【解决方案1】:

    如果你想做自己的套接字网络,可以在 Swift 中使用 NSStream 和 CFStream API 来连接/读取/写入原始网络套接字。

    这里有一些有用的 Swift 3 sn-ps 用于通过 NSStream 使用套接字:

    var readStream:  Unmanaged<CFReadStream>?
    var writeStream: Unmanaged<CFWriteStream>?
    var inputStream   : InputStream?    =  nil
    var outputStream  : OutputStream?   =  nil
    
    let host : CFString = NSString(string: someHostIPString)
    let port : UInt32   = UInt32(somePortNumber)
    
    CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault,
                                           host,
                                           port,
                                           &readStream,
                                           &writeStream)
    
    inputStream  = readStream!.takeUnretainedValue()
    outputStream = writeStream!.takeUnretainedValue()
    
    // the enclosing class should be a StreamDelegate
    //   to handle stream open, events, or errors, etc.
    inputStream!.delegate   = self
    outputStream!.delegate  = self
    
    inputStream.open()
    outputStream.open()
    
    // the NSStream delegate callback(s)
    func stream(_ aStream: Stream, handle eventCode: Stream.Event) {
        var n = 0
        switch (eventCode) {
        ...
        case Stream.Event.hasSpaceAvailable:
        n = self.outputStream.write(someWriteBuffer, maxLength: dataLength) 
        ...
        case Stream.Event.hasBytesAvailable:
        n = self.inputStream.read(someReadBuffer, maxLength: bufferLength)
        ...
        // etc.
        }
    }
    
    // etc.
    

    您可能希望使用自己的 runloop 在自己的线程中运行上述代码。

    【讨论】:

    • 很抱歉,我是新手,不太明白您的回答。我正在寻找一些可用于使用套接字编程与设备进行通信的库。
    • 上面的代码 sn-ps 展示了如何打开、读取和写入套接字(通过 Swift 中的委托回调)。您还需要其他形式的套接字通信吗?
    猜你喜欢
    • 2014-04-23
    • 2016-11-21
    • 2019-07-10
    • 2021-05-22
    • 2017-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-15
    相关资源
    最近更新 更多