我正在使用Unitt库(http://code.google.com/p/unitt/wiki/UnittWebSocketClient)尝试通过iOS(iPhone)应用程序中的WebSockets建立与本地服务器的连接。
我已成功配置项目并包含必要的项目文件,但由于某种原因我无法建立简单的连接。我正在使用的代码是:
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];
不幸的是,当我运行脚本时,唯一的输出是[通过console / NSLog]:
糟糕。发生错误。
糟糕。它关闭了。
我唯一能想到的是,在尝试执行握手/登录时,我不会发送一些我应该提供的其他信息。例如,服务器需要一个用户名等。这可能是问题,或者可能是不相关的东西?
我已经在这方面工作了很长一段时间,我可以把它搞清楚,所以我一定会感激任何帮助。感谢。
编辑:没有任何变化,我现在也会遇到这样的错误:
* 断言失败 - [AsyncSocket doCFReadStreamCallback:forStream:], /Users/jmorris/Projects/xCode/UnitT/UnittWebSocketClient/trunk/UnittWebSocketClient/AsyncSocket.m:2811
* 由于未捕获的异常'NSInternalInconsistencyException'而终止应用,原因:'参数无效 满足:theReadStream!= NULL'
答案 0 :(得分:1)
您知道服务器正在运行的Web套接字规范的版本吗?我希望您的客户端版本和服务器版本出现不匹配的情况。只有在规范的后续版本中才有清晰的方式来沟通和处理这些事情。我正在研究最新版本的更新,但是假期让这些事情最近变得有些挑战。 :)
答案 1 :(得分:0)
您应该尝试SocketRocket,我们刚刚发布的WebSocket库。支持RFC 6455(最新标准)。没有CocoaAsyncSocket依赖。
答案 2 :(得分:0)
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];
这是我正在使用的代码,它工作正常。我有停车时间的问题所以,我不是从客户端ping,而是从服务器端ping。