Я создал небольшой скрипт на стороне клиента сокета, ожидающий сообщения от сервера.Моя цель состоит в том, чтобы иметь противоположный сервер, который открыт и прослушивает клиентское сообщение, но при этом он также отправляет сообщения.Я уже включил делегата, чтобы «прослушивать» новые сообщения.Любая идея ?Спасибо!
import UIKit
class ViewController: UIViewController, StreamDelegate {
struct connectionStream {
static var inp :InputStream?
static var out :OutputStream?
}
var inputStream: InputStream!
var outputStream: OutputStream!
override func viewDidLoad() {
super.viewDidLoad()
let addr = "127.0.0.1"
let port = 12345
Stream.getStreamsToHost(withName: addr, port: port, inputStream: &connectionStream.inp, outputStream: &connectionStream.out)
inputStream = connectionStream.inp!
outputStream = connectionStream.out!
self.inputStream.delegate = self
self.outputStream.delegate = self
self.inputStream.schedule(in: RunLoop.current, forMode: RunLoop.Mode.default)
self.outputStream.schedule(in: RunLoop.current, forMode: RunLoop.Mode.default)
self.inputStream.open()
self.outputStream.open()
}
@IBAction func messageToHololens(_ sender: Any) {
self.sendToHololens("Hello Hololens")
}
func sendToHololens(_ messageValue : String) {
let length_message = messageValue.count
self.outputStream!.write(messageValue, maxLength: length_message)
print("message envoyé")
}
func disconnect() {
self.inputStream.close()
self.outputStream.close()
}
func stream(_ aStream: Stream, handle eventCode: Stream.Event) {
if aStream === inputStream {
switch eventCode {
case Stream.Event.openCompleted:
print("client accepté")
case Stream.Event.hasBytesAvailable:
var buffer = [UInt8](repeating: 0, count: 4096)
while (self.inputStream.hasBytesAvailable){
let len = self.inputStream.read(&buffer, maxLength: buffer.count)
if(len > 0){
let output = NSString(bytes: &buffer, length: len, encoding: String.Encoding.utf8.rawValue)
if (output != ""){
print("server said:", output!)
}
}
}
default:
break
}
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}