Клиент-серверное приложение с Swift и Stack Overflow

Я пытаюсь создать простое приложение для передачи данных между клиентом (Swift, iOS) и сервером (C ++, Windows). Я хочу использовать сокеты для передачи данных. Так что у меня есть довольно-таки работающий сервер (я могу подключиться к нему с помощью клиента c ++), но когда я пытаюсь подключиться к нему с помощью NSStream от Swift — я получаю ошибку. Может я что-то упустил? Каковы правила использования сокетного соединения между сервером c ++ в Windows и iOS.

Так что через некоторое время я получил сообщение об ошибке «ErrorOccured» на моем клиенте.
Вот мой код для соединения с NSStream:

let SERVER_IP: String = "MY_SERVER_IP"let SERVER_PORT: Int = MY_PORT

class ViewController: UIViewController, NSStreamDelegate {
var inputStream: NSInputStream? = nil
var outputStream: NSOutputStream? = nil

override func viewDidLoad() {
super.viewDidLoad()

NSStream.getStreamsToHostWithName(SERVER_IP, port: SERVER_PORT, inputStream: &inputStream, outputStream: &outputStream)

if inputStream != nil && outputStream != nil {
inputStream!.delegate = self
outputStream!.delegate = self

inputStream!.scheduleInRunLoop(.mainRunLoop(), forMode: NSDefaultRunLoopMode)
outputStream!.scheduleInRunLoop(.mainRunLoop(), forMode: NSDefaultRunLoopMode)

inputStream!.open()
outputStream!.open()
}

}func stream(aStream: NSStream, handleEvent eventCode: NSStreamEvent) {
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:
break
}}

}

1

Решение

Ну, похоже, эта проблема была на стороне сервера. Этот код работает отлично. Моя вина 🙂

0

Другие решения


По вопросам рекламы [email protected]