Derzeit arbeite ich an einem Programm, in dem ich zwei IOS-Geräte mit NSNetService-Klasse verbinden. Ich bin in der Lage, beide Geräte zu verbinden, aber ich weiß nicht, wie man Daten mit der Funktion getInoutStream sendet. Kann mir irgendjemand helfen?In der swift NSNetService-Klasse, wie Daten mit getInoutStream gesendet werden
-1
A
Antwort
1
Warum nicht multipeer verwenden? Es ist eine viel einfachere Lösung für das, was Sie versuchen zu tun. Auch NSNetService hat ein paar bekannte Fehler. Sie senden jedoch Daten zwischen den beiden, indem Sie eine Bonjour-Verbindung auf NSNetService einrichten. Die getInputStream Methode erfordert Argumente des Typs UnsafeMutablePointer:
public func getInputStream(inputStream: UnsafeMutablePointer<NSInputStream?>, outputStream: UnsafeMutablePointer<NSOutputStream?>) -> Bool
var inputStream : NSInputStream?
var outputStream : NSOutputStream?
let success = service.getInputStream(&inputStream, outputStream: &outputStream)
Dann nur Daten schreiben einen Speicher-Stream verwenden und es wird an den Listener-Port übergeben bekommen.
Dies ist der fertige Code:
Diese Funktion löst die Verbindung auf 127.0.0.1
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()
Und das ist für den Strom IO:
func stream(aStream: NSStream, handleEvent eventCode: NSStreamEvent) { //This is the stream IO function. It allows RW of the stream
switch (eventCode){
case NSStreamEvent.ErrorOccurred:
NSLog("ErrorOccurred")
break
case NSStreamEvent.EndEncountered:
NSLog("EndEncountered")
break
case NSStreamEvent.None:
NSLog("None")
break
case NSStreamEvent.HasBytesAvailable:
NSLog("HasBytesAvaible")
var buffer = [UInt8](count: 4096, repeatedValue: 0)
if (aStream == inputstream){
while (inputstream.hasBytesAvailable){
var len = inputstream.read(&buffer, maxLength: buffer.count)
if(len > 0){
var output = NSString(bytes: &buffer, length: buffer.count, encoding: NSUTF8StringEncoding)
if (output != ""){
NSLog("server said: %@", output!)
}
}
}
}
break
case NSStreamEvent.allZeros:
NSLog("allZeros")
break
case NSStreamEvent.OpenCompleted:
NSLog("OpenCompleted")
break
case NSStreamEvent.HasSpaceAvailable:
NSLog("HasSpaceAvailable")
break
default:
// default code here
break
}
Dankten für die Antwort. Ich habe all diese Dinge getan, aber ich möchte eine Nachricht zwischen beiden Geräten senden, also was soll ich tun? – Avim
@AvinashMulewa Ich habe es dir gesagt. Verwenden Sie einen Speicher-Stream und schreiben Sie einfach auf 'Erfolg'. – RhysO
Ich bin Anfänger in Swift können Sie mir bitte den Code senden. – Avim