解决方法
如果您想要自己的套接字网络,可以使用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在自己的线程中运行上面的代码.