我想使用套接字编程将Swift应用程序连接到网络硬件设备。服务器端编程已经在使用C语言的硬件设备中完成。如何使用套接字编程连接设备并与之通信?我应该选择哪个图书馆?
最佳答案
如果您想进行自己的套接字网络连接,则可以从Swift使用NSStream和CFStream API来连接/读取/写入原始网络套接字。
以下是一些有用的Swift 3片段,可用于通过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在其自己的线程中运行以上代码。