Быстро создать сокет-клиент с GCDAsyncSocket

Как создать клиент сокета с GCDAsyncSocket, используя язык swift. Я использую следующий код:

class MySocketClient: GCDAsyncSocketDelegate{
let addr = "192.168.131.218"
let port :UInt16 = 8000
var inp :NSInputStream?
var out :NSOutputStream?
var bsocket: GCDAsyncSocket!
var err :NSError?

func initClient(name: String) ->String{
    bsocket = GCDAsyncSocket(delegate: self, delegateQueue: dispatch_get_main_queue())
    return "init result:"+name
}

func connect(){
    if(!bsocket.connectToHost(addr, onPort: port, error: nil)){
        println("Error.")
    }else{
        println("Connecting...")

    }
}
}

Но странно, результат

bsocket.connectToHost(addr, onPort: port, error: nil) всегда возвращает true.

Независимо от того, я меняю IP-адрес или порт, которые недоступны.

Почему? И как правильно создать клиент сокета и использовать его для получения/отправки данных на сервер?


person fcbflying    schedule 02.12.2015    source источник


Ответы (1)


connectToHost возвращает true, поскольку попытка подключения началась успешно.

Когда соединение будет установлено, будет вызван метод делегата socket:didConnectToHost:port:.

Из документации для connectToHost:

Этот метод вернет NO, если обнаружена ошибка, и установит указатель ошибки (если он был задан). Возможными ошибками могут быть нулевой хост, недопустимый интерфейс или сокет уже подключен.

Если ошибок не обнаружено, этот метод запустит операцию фонового подключения и немедленно вернет YES. Обратные вызовы делегата используются для уведомления о подключении сокета или о недоступности хоста.

person Paulw11    schedule 02.12.2015