2016-04-29 9 views

答えて

1

なぜ使用しないのですかmultipeer?これは、あなたがやろうとしていることに対してはるかに簡単な解決策です。また、NSNetServiceにはいくつかの既知のバグがあります。ただし、NSNetServiceでBonjour接続を設定することで、2つの間でデータを送信します。 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() 

の接続を開始し、これはストリームのためである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

は、返信用のありがとう。私はこれらのことすべてを行ったが、私は両方のデバイス間でメッセージを送信したいので、何をすべきか? – Avim

+0

@AvinashMulewa私はあなたに言った。メモリストリームを使用し、「成功」に書き込みます。 – RhysO

+0

私はすぐに初心者ですので、コードを送ってください。 – Avim

関連する問題