首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >创建一个通过Swift 3中的套接字接收数据的InputStream (iOS)

创建一个通过Swift 3中的套接字接收数据的InputStream (iOS)
EN

Stack Overflow用户
提问于 2017-02-09 22:59:14
回答 1查看 1.7K关注 0票数 0

因此,我的问题是让InputStream在iOS平台上快速工作。我编写了一些代码,并会在下面发布,但基本上我有一个安卓客户端,它向iOS客户机的IP发送数据。不幸的是,安卓客户端表示,连接被拒绝连接到iOS客户端。我真的不太清楚我在这里做错了什么,因为我认为代码看起来很可靠,所以我有点困惑。顺便说一句,这是我第一次在iOS中使用套接字,所以请理解我是新手,我是来这里学习示例代码的。

ViewControler.swift

代码语言:javascript
运行
复制
var inputstream: InputStream?
var outputstream: OutputStream?
var host: CFString?
var port: UInt32?
override func viewDidLoad() {
    super.viewDidLoad()
    initNetworkCommunication()
}
func initNetworkCommunication(){
    host = "192.168.1.187" as CFString
    port = 55555
    var readstream : Unmanaged<CFReadStream>?
    var writestream : Unmanaged<CFWriteStream>?
    CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, host!, port!, &readstream, &writestream)

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

    inputstream?.delegate = self as! StreamDelegate
    outputstream?.delegate = self as! StreamDelegate


    inputstream?.schedule(in: RunLoop.current, forMode: RunLoopMode.defaultRunLoopMode)
    outputstream?.schedule(in: RunLoop.current, forMode: RunLoopMode.defaultRunLoopMode)

    inputstream?.open()
    Status.text = "Input Stream Opened"
    outputstream?.open()
    Status.text = "Output Stream Opened"

}
func stream(_ aStream: Stream, handleEvent eventCode: Stream.Event) {
    switch (eventCode){
    case Stream.Event.errorOccurred:
        print("Can not connect to the host!")
        Status.text = "Cannot connect to: \(host ?? "Null Host" as CFString)"
        break
    case Stream.Event.endEncountered:
        outputstream?.close()
        outputstream?.remove(from: RunLoop.current, forMode: RunLoopMode.defaultRunLoopMode)
        outputstream = nil
        break
    case Stream.Event.hasBytesAvailable:
        Status.text = "Recieving data..."
        NSLog("HasBytesAvaible")
        var buffer = [UInt8](repeating: 0, count: 4096)
        if ( aStream == inputstream){
            while (inputstream?.hasBytesAvailable)!{
                var len = inputstream?.read(&buffer, maxLength: buffer.count)
                if(len! > 0){
                    Status.text = "Collected data..."
                    var data1 = NSData(bytes: buffer, length: buffer.count)
                    Status.text = "Converted Data to NSData..."
                    var str64 = data1.base64EncodedData(options: .lineLength64Characters)
                    Status.text = "Decode Base64..."
                    let data: NSData = NSData(base64Encoded: str64 , options: .ignoreUnknownCharacters)!
                    // turn  Decoded String into Data
                    Status.text = "Turning Base64 data into image..."
                    let dataImage = UIImage(data: data as Data)
                    Status.text = "Done"
                    // pass the data image to image View.:)
                    Display.image = dataImage
                    Status.text = "Image Displayed"
                }
            }
        }
        break
    case Stream.Event.openCompleted:
        NSLog("OpenCompleted")
        break
    case Stream.Event.hasSpaceAvailable:
        NSLog("HasSpaceAvailable")
        break
    default:
        print("Unknown event")
    }
}
EN

回答 1

Stack Overflow用户

发布于 2017-02-10 04:46:22

听起来,安卓设备正试图连接到iOS设备,而从您发布的代码来看,iOS设备正试图连接到安卓设备。这不是套接字网络的工作方式。

其中一个设备(或者两者兼而有之,如果这是对等设备设置)需要侦听特定端口上的连接。有关从ref/doc/uid/CH73-SW8创建侦听套接字的信息,请参阅本指南( iOS )。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42148518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档