ios - swift OutputStream 找不到成员 "write"

标签 ios swift nsstream external-accessory nsoutputstream

我正在尝试将数据发送到 OutputStream 以与另一个设备进行通信。 (为此,我使用外部附件框架)但该功能不起作用。我遇到错误无法找到成员“write”。我希望有人可以帮助我找到解决方案。谢谢。

func _writeData() {

    while (_session.outputStream.hasSpaceAvailable && _write.length > 0) {
    var bytesWritten: Int = _session?.outputStream.write(_write.bytes, _write.length);
        if(bytesWritten == -1){
            println("write error");
            break;
        }
        else if (bytesWritten > 0){
            _write.replaceBytesInRange(NSMakeRange(0, bytesWritten), withBytes: nil, length: 0);
        }
    }
}

//high level write data method
func writeData(data: NSData) {
    if(_write == nil) {
        _write = NSMutableData.alloc();
    }
    _write.appendData(data);
    self._writeData();
}

错误--------> var bytesWritten: Int = _session?.outputStream.write(_write.bytes, _write.length);

有我打开和关闭 session 的功能

//使用附件打开 session 并在默认运行循环上设置输入和输出流 func openSession(附件: EAAccessory, withProtocolString protocolString: String) -> ObjCBool​​{

    _session = EASession(accessory: accessory, forProtocol: protocolString);

    if(_session != nil) {

        _session.inputStream.scheduleInRunLoop(NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode);
        _session.inputStream.open()

        _session.outputStream.scheduleInRunLoop(NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode);
        _session.outputStream.open();

    } else {
        println("Creating session failed");
    }
    return (_session != nil);
}

//close the session with the accessory
func closeSession() {

    _session.inputStream.close();
    _session.inputStream.removeFromRunLoop(NSRunLoop(), forMode: NSDefaultRunLoopMode);

    _session.outputStream.close();
    _session.outputStream.removeFromRunLoop(NSRunLoop(), forMode: NSDefaultRunLoopMode);
}

最佳答案

经过很多测试后,我已经能够写入套接字,这是我的代码:

    var inputStream: NSInputStream?
    var outputStream: NSOutputStream?

    NSStream.getStreamsToHostWithName("localhost", port: 8443, inputStream: &inputStream, outputStream: &outputStream)
    outputStream?.open()
    inputStream?.open()
    //while(true){
      //get input
    //}
    let data: NSData = "this is a test string".dataUsingEncoding(NSUTF8StringEncoding)!
    outputStream?.write(UnsafePointer<UInt8>(data.bytes), maxLength: data.length)

您可以使用net cat进行测试

nc -l 8443

关于ios - swift OutputStream 找不到成员 "write",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24881065/

相关文章:

swift - 使用 NSJSONSerialization 解析 twitter 搜索 json 数据

ios - TCP 套接字在运行 iOS 10.3.2 的 iPhone 7 上不起作用

objective-c - 写入后 NSOutputStream 因访问错误而崩溃(Objective-c)

ios - 如何创建无限期地每 n 分钟调用一次的后台函数

ios - 在 Objective-C(iOS) 的模态序列中实现 SDWebImage

ios - 在 iOS 中为序列设置动画的最佳方式

swift - URLSession.shared.dataTaskPublisher 在 IOS 13.3 上不起作用

ios - 如何使用 Swift 将 "Done"按钮添加到 iOS 中的小键盘?

ios - 子类化 NSInputStream 以从本地文件路径上传特定部分的数据

ios - PageviewController 总是返回一个像 2147483648 这样的索引