2
私はBonjourサービスと単純なソケットI/Oストリームについてのサンプルを書こうとしています。OutputStreamで書き込むときの成功を確認する方法は?
私は現在、何ができるか、である:
- は、サービスを公開し、それをスキャンします。
- 2つのデバイスまたはシミュレータ間にI/Oストリームソケットを作成します。
ソケットが接続された後、サービスにテキストを送信する際に問題が発生しました。
@IBAction func sendMessage(sender:AnyObject!){
if (self.outputStream == nil){
print("Connection not create yet ! =====> Return")
return
}
let s : String = (self.textfield?.text)!
print("\(self.outputStream) ==> Pass Data : \(s)")
let data: NSData = s.data(using: String.Encoding.utf8)!
self.outputStream?.open()
self.outputStream?.write(UnsafePointer<UInt8>(data.bytes), maxLength: data.length)
self.outputStream?.close()
//Service no any response or log
}
ボタンが押されても、何も起きていないようで、書き込みかどうかはわかりません。
UPDATE
クライアントが情報を受信すると問題が発生しました。実行ループが必要でした。
func netService(_ sender: NetService, didAcceptConnectionWith inputStream: InputStream, outputStream: NSOutputStream) {
self.receiveTextView?.text = "Accept Connection Success"
print("netService : \(sender) didAcceptConnectionWith Input Stream : \(inputStream) , Output Stream : \(outputStream)")
inputStream.delegate = self
outputStream.delegate = self
inputStream.schedule(in: RunLoop.main(), forMode: RunLoopMode.defaultRunLoopMode)
outputStream.schedule(in: RunLoop.main(), forMode: RunLoopMode.defaultRunLoopMode)
inputStream.open()
outputStream.open()
}
次に、データはStreamデリゲートで受信されます。あなたはsendMessage(_:)
メソッドが呼び出さなっていると、あなたが行うために探しているすべての書き込みが成功したかどうかを確認され、これはでまっすぐ進む方法で行うことができることを知っていると仮定すると、
func stream(_ aStream: Stream, handle eventCode: Stream.Event) {
case Stream.Event.hasBytesAvailable:
NSLog("HasBytesAvailable")
var buffer = [UInt8](repeating:0, count:4096)
let inputStream = aStream as? InputStream
while ((inputStream?.hasBytesAvailable) != false){
let len = inputStream?.read(&buffer, maxLength: buffer.count)
if(len > 0){
let output = NSString(bytes: &buffer, length: buffer.count, encoding: String.Encoding.utf8.rawValue)
if (output != ""){
NSLog("Server Received : %@", output!)
self.receiveTextView?.text = output as String?
}
}else{
break
}
}
break
default:
NSLog("unknown.")
}
}
ありがとうございます。ありがとうございます。ありがとうございます。ここでサンプルコードを試してみましょう。 –
私はこのようなログを得ました 問題は受信者が送信者ではないようです。 <__ NSCFOutputStream:0x1266c5dc0> ==>データを渡す:テスト 書き込まれたバイト数は4 ですが、これは成功したようですが、サービスは何も起こりません。 –
あなたの答えは最初のアクションで成功を送ることができますが、それはいつも失敗します、私はコード "outputStream.close()"をマークする必要があります、それはいつも成功するでしょう、なぜ??? –