相关疑难解决方法(0)

从Swift中的NSInputStream接收数据

我尝试在Swift中使用NSOutputStream和NSInputStream发送和接收数据.发送数据运行良好,但我对接收有一些疑问.

我找到了一个处理NSStreamEvent的解决方案,我试过了.

首先是我初始化连接的功能:

func initNetworkCommunication(){  
    var host : CFString = "127.0.0.1"
    var port : UInt32 = 7001
    var readstream : Unmanaged<CFReadStream>?
    var writestream : Unmanaged<CFWriteStream>?
    CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, host, port, &readstream, &writestream)

    inputstream = readstream!.takeRetainedValue()
    outputstream = writestream!.takeRetainedValue()

    inputstream.delegate = self
    outputstream.delegate = self


    inputstream.scheduleInRunLoop(NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode)
    outputstream.scheduleInRunLoop(NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode)

    inputstream.open()
    outputstream.open()   
}
Run Code Online (Sandbox Code Playgroud)

这部分正在运作.我已将委托设置为self,因此我应该能够处理此类中的NSStreamEvents.

func stream(aStream: NSStream, handleEvent eventCode: NSStreamEvent) {
    switch (eventCode){
    case NSStreamEvent.OpenCompleted:
        NSLog("Stream opened")
        break
    case NSStreamEvent.HasBytesAvailable:
        NSLog("HasBytesAvailable")
        break
    case NSStreamEvent.ErrorOccurred:
         NSLog("ErrorOccurred")
        break
    case NSStreamEvent.EndEncountered:
        NSLog("EndEncountered")
        break
    default:
        NSLog("unknown.") …
Run Code Online (Sandbox Code Playgroud)

inputstream nsstream swift

18
推荐指数
1
解决办法
2万
查看次数

像在Java中一样在Swift中使用套接字

如果我想连接到服务器,在Java中我会打开一个Socket并用端口和主机地址初始化它,然后检索输入/输出流并读/写我想要的任何内容.

在Swift中我很难这样做,因为它不是那样构建的,我真的希望看到一个如何连接到服务器,检索流并使用它们的简单示例.

EDIT1:

这是经过@Grimxn引用的测试代码.

var host = "http://google.com"
var readStream :CFReadStreamRef
var writeStream :CFWriteSteamRef
var socket = CFStreamCreatePairWithSocketToHost(nil, host, 80, readStream, writeStream)
Run Code Online (Sandbox Code Playgroud)

主要问题:

  1. 初始化上面的两个流也需要使用我一无所知的CFAllocator.使用kCFAllocatorDefault没有太大帮助,相同的错误.

  2. 上面的代码返回此错误:无法将表达式的类型'Void'转换为类型UInt32.

  3. 例如,当我使用UInt32(80)构造UInt32时,错误是:找不到接受所提供参数的'init'的重载.

我感谢任何帮助!

sockets input stream output swift

12
推荐指数
1
解决办法
2万
查看次数

标签 统计

swift ×2

input ×1

inputstream ×1

nsstream ×1

output ×1

sockets ×1

stream ×1