因此,我的问题是让InputStream在iOS平台上快速工作。我编写了一些代码,并会在下面发布,但基本上我有一个安卓客户端,它向iOS客户机的IP发送数据。不幸的是,安卓客户端表示,连接被拒绝连接到iOS客户端。我真的不太清楚我在这里做错了什么,因为我认为代码看起来很可靠,所以我有点困惑。顺便说一句,这是我第一次在iOS中使用套接字,所以请理解我是新手,我是来这里学习示例代码的。
ViewControler.swift
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")
}
}
发布于 2017-02-10 04:46:22
听起来,安卓设备正试图连接到iOS设备,而从您发布的代码来看,iOS设备正试图连接到安卓设备。这不是套接字网络的工作方式。
其中一个设备(或者两者兼而有之,如果这是对等设备设置)需要侦听特定端口上的连接。有关从ref/doc/uid/CH73-SW8创建侦听套接字的信息,请参阅本指南( iOS )。
https://stackoverflow.com/questions/42148518
复制相似问题