2016-04-29 12 views

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 
    } 
+0

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

+0

@AvinashMulewa Ich habe es dir gesagt. Verwenden Sie einen Speicher-Stream und schreiben Sie einfach auf 'Erfolg'. – RhysO

+0

Ich bin Anfänger in Swift können Sie mir bitte den Code senden. – Avim