Unitt: установление соединения через WebSocket - PullRequest
0 голосов
/ 22 ноября 2011

Я использую библиотеку Unitt (http://code.google.com/p/unitt/wiki/UnittWebSocketClient), чтобы попытаться установить соединение с локальным сервером через WebSockets в моем приложении для iOS (iPhone).

Я успешно настроил проект и включаю необходимые файлы проекта, но по какой-то причине я не могу установить простое соединение. Код, который я использую:

в SomeWebsocket.m:

WebSocketConnectConfig* config = [WebSocketConnectConfig configWithURLString:@"ws://localhost" origin:nil protocols:nil tlsSettings:nil headers:nil verifySecurityKey:YES extensions:nil ];
config.closeTimeout = 15.0;
ws = [WebSocket webSocketWithConfig:config delegate:self];
[ws open];

в SomeViewController.m:

MyWebSocket* myWS =[[MyWebSocket alloc] init];
[myWS startMyWebSocket];

К сожалению, когда я запускаю скрипт, единственным выходом является [через консоль / NSLog]:

К сожалению. Произошла ошибка.

К сожалению. Закрыто.

Единственное, о чем я могу думать, это то, что при попытке выполнить рукопожатие / вход в систему я не посылаю какую-то дополнительную информацию, которой я должен быть. Сервер, например, ожидает имя пользователя среди других вещей. Может ли это быть проблемой, или, может быть, это что-то не связанное?

Я работаю над этим уже довольно давно, и я могу «разобраться», поэтому я определенно буду признателен за любую помощь. Спасибо.

РЕДАКТИРОВАТЬ: без изменений, теперь я также получаю ошибки, такие как:

* Ошибка подтверждения в - [AsyncSocket doCFReadStreamCallback: forStream:], /Users/jmorris/Projects/xCode/UnitT/UnittWebSocketClient/trunk/UnittWebSocketClient/AsyncSocket.m:2811

* Завершение работы приложения из-за необработанного исключения «NSInternalInconsistencyException», причина: «Недопустимый параметр не удовлетворяющий: theReadStream! = NULL '

Ответы [ 3 ]

1 голос
/ 02 декабря 2011

Знаете ли вы, какую версию спецификации веб-сокета использует сервер? Я ожидаю, что ваша версия клиента и версия вашего сервера не совпадают. Только в более поздних версиях спецификации есть ясный способ общаться и обрабатывать такие вещи. Я работаю над обновлением до последней версии, но в последнее время праздники сделали такие вещи немного сложными. :)

0 голосов
/ 04 июля 2012
WebSocketConnectConfig* config = [WebSocketConnectConfig 
                                  configWithURLString:kWebsocketURL 
                                  origin:nil
                                  protocols:nil 
                                  tlsSettings:nil 
                                  headers:nil 
                                  verifySecurityKey:YES 
                                  extensions:nil];

config.closeTimeout = -1;
config.timeout = -1;
   //   config.keepAlive = 5.0; //send ping from the server to keep socket alive 
WebSocket *ws1 = [WebSocket webSocketWithConfig:config delegate:shared];

Это код, который я использую, и он отлично работает.У меня были проблемы с остановкой, поэтому я не пингую с клиента, а только со стороны сервера.

0 голосов
/ 13 февраля 2012

Вы должны попробовать SocketRocket , библиотеку WebSocket, которую мы только что выпустили. Поддерживает RFC 6455 (последний стандарт). Нет зависимостей CocoaAsyncSocket.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...