したがって、問題は、iOSプラットフォームのswift内でInputStreamが動作するようになっていることです。私はいくつかのコードを書いて下に投稿しますが、基本的には、iOSクライアントのIPにデータを送信するAndroidクライアントがあります。残念ながら、Androidクライアントは、接続がiOSクライアントへの接続を拒否されたと言います。私はコードがしっかりしていると思うので、私がここで間違っていることを本当に確信していないので、混乱します。ちなみにこれは私の初めてのソケット(iOS)での作業ですので、私はこれを初めて知っていて、ここではサンプルコードを学ぶことを理解してください。Swift 3(iOS)のソケットを介してデータを受け取るInputStreamを作成する
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")
}
}
ここで試しているようにデバイス間の直接接続が堅牢に行うことは非常に困難であることを私は警告する必要があります。両方のデバイスが同じWi-Fiに接続されている場合でも正常に動作するかもしれませんが、それを超えて...多くの苦痛の中にあります。どのようなタイプの問題を解決しようとしていますか? –
私は完全にWiFiが安定していないことを完全に理解しています。ここでは矛盾がありますが、基本的にはソケットで作業するという概念証明を得るだけです。 USB接続によるソケットははるかに簡単になります。しかし、基本的には、Android搭載端末からiOS搭載端末に1秒間に約4枚の画像を送信しようとしています。それから私はAndroidデバイスにメッセージを送り返す必要があり、基本的にこれを繰り返し繰り返します。それは疑いの余地のない複雑なプロジェクトです。助けてくれてありがとう! –
ようこそ。あなたのプロジェクトに幸運を祈る! –