J'essaie d'écrire un exemple sur le service Bonjour et un simple flux d'E/S de socket.Comment vérifier le succès lors de l'écriture avec OutputStream?
Ce que je peux en faire, est:
- publier un service et le scanner.
- Créez un socket de flux d'E/S entre deux périphériques ou le simulateur. Une fois le socket connecté, j'ai eu un problème avec l'envoi de texte au service
Lorsque le bouton est pressé, rien ne semble se produire, et je me demande s'il écrit ou non.
MISE À JOUR
Il y avait un problème avec le client recevant les informations. Une boucle d'exécution était nécessaire.
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()
}
Les données sont ensuite reçues dans le délégué de flux.
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.")
}
}
Merci, je vais essayer votre exemple de code maintenant, et répondre le résultat ici. –
J'ai eu le journal comme ceci Il semble que le problème est le destinataire pas l'expéditeur. <__ NSCFOutputStream: 0x1266c5dc0> ==> Données de passe: Test Le nombre d'octets écrits est 4 , Il semble que le succès, mais le service ne se passe rien. –
Votre réponse peut envoyer le succès à une première action, mais en second lieu il échouera toujours, je dois marquer le code "outputStream.close()", que ce sera le succès à chaque fois, pourquoi ??? –