我正在使用unit库(http://code.google.com/p/unitt/wiki/UnittWebSocketClient)尝试在我的iOS (iPhone)应用程序中通过WebSockets建立到本地服务器的连接。
我已经成功配置了项目,并包含了必要的项目文件,但由于某种原因,我无法建立一个简单的连接。我使用的代码是:
在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],:
哦。发生错误。
哦。它关闭。
我唯一能想到的是,当尝试执行握手/登录时,我没有发送一些我应该发送的额外信息。例如,服务器需要用户名。这是问题所在吗,还是其他无关的问题?
我研究这个已经有一段时间了,但我不能弄清楚,所以我非常感谢任何帮助。谢谢。
编辑:没有更改,我现在也得到这样的错误:
* assert failed in -[AsyncSocket doCFReadStreamCallback:forStream:],/用户/jmorris/项目/xCode/UnitT/UnittWebSocketClient/箱子/UnittWebSocketClient/AsyncSocket.m: 2811
*由于未捕获异常'NSInternalInconsistencyException'而终止应用程序,原因:'无效参数不是= NULL'
你知道服务器运行的是什么版本的web套接字规范吗?我希望您的客户端版本和服务器版本不匹配。只有在规范的后期版本中,才有了一种清晰的方式来通信和处理这些事情。我正在做最新版本的更新,但是假期让这些事情变得有点挑战。:)
您应该尝试一下我们刚刚发布的WebSocket库SocketRocket。支持最新标准RFC 6455。没有CocoaAsyncSocket依赖
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];
这是我正在使用的代码,它工作得很好。我有stoppingtimer的问题,所以,我不ping从客户端,但只是从服务器端。