2016-04-29 1 views
-1

В настоящее время я работаю над программой, в которой я подключаю два устройства IOS с использованием класса NSNetService. Я могу подключить оба устройства, но я не знаю, как отправлять данные с помощью функции getInoutStream. Может ли кто-нибудь приятель мне помочь.В быстром классе NSNetService, как отправлять данные с помощью getInoutStream

ответ

1

Почему бы не использовать multipeer? Это гораздо более простое решение того, что вы пытаетесь сделать. Также NSNetService имеет несколько известных ошибок. Однако вы отправляете данные между ними, установив соединение Bonjour на NSNetService. Метод getInputStream требует аргументов типа UnsafeMutablePointer:

public func getInputStream(inputStream: UnsafeMutablePointer<NSInputStream?>, outputStream: UnsafeMutablePointer<NSOutputStream?>) -> Bool 

var inputStream : NSInputStream? 
var outputStream : NSOutputStream? 

let success = service.getInputStream(&inputStream, outputStream: &outputStream) 

Тогда просто записывать данные, используя поток памяти и он будет получать передаваемый в порт слушателя.

Это готовый код:

Эта функция инициирует соединение на 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() 

И это для потока ввода-вывода:

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

Спасибо за ответ. Я сделал все это, но хочу отправить сообщение между обоими устройствами, так что мне делать? – Avim

+0

@ AvinashMulewa Я же сказал. Используйте поток памяти и просто напишите в «success». – RhysO

+0

Я начинаю быстро, вы можете отправить мне код. – Avim

Смежные вопросы