连接到NodeJS socket.io的iOS客户端遇到Stream结束

我有一个使用socket.io并监听端口8000的NodeJS服务器。代码如下所示:

var io = require("socket.io"); var socket = io.listen(8000); ... socket.sockets.on("connection", function(client) { util.log("Client connects: " + client.id); }); 

我已经写了一个可以连接到这个服务器的Web客户端,它工作得很好。 所以服务器代码不是问题。 问题在于我将要描述的iOS客户端。

iOS客户端使用SocketRocket并安装它,我使用Cocoapods并使用以下的Podfile:

 platform :ios pod 'SocketRocket', '0.2.0' 

在MyViewController.h中

 #import <SocketRocket/SRWebSocket.h> @interface MyViewController : UIViewController<SRWebSocketDelegate> ... @property (strong, nonatomic) SRWebSocket *socket; @end 

在MyViewController.m中

 @synthesize socket = _socket; ... - (void)viewDidLoad { _socket = [[SRWebSocket alloc] initWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://127.0.0.1:8000"]]]; _socket.delegate = self; [_socket open]; NSLog(@"Connect"); } - (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(id)message { NSLog(@"Error didReceiveMessage"); } - (void)webSocket:(SRWebSocket *)webSocket didFailWithError:(NSError *)error { NSLog(@"Error connecting websocket"); } - (void)webSocket:(SRWebSocket *)webSocket didCloseWithCode:(NSInteger)code reason:(NSString *)reason wasClean:(BOOL)wasClean { NSLog(@"Error didCloseWithCode %d: %@", code, reason); } 

当iOS客户端运行时,显示“Connect”日志。 但委托didCloseWithCode()也被调用。 日志显示

 Error didCloseWithCode 0: Stream end encountered 

我花了很多时间来弄清楚,但现在是时候从专家那里得到一些帮助。 为什么我得到“stream结束”问题。 NodeJS服务器工作得很好,因为我可以通过Web客户端连接到它。 我在做什么错误的iOS客户端,我该如何纠正?

更新:在服务器上添加JavaScript代码以显示util.log()调用。 当Web客户端连接时,控制台显示“客户端连接…”消息。当iOS客户端尝试连接时,控制台上没有任何东西。

事实certificate,socket.io具有自己的authentication协议,并且与开箱即用的SocketRocket不兼容。 看到这个答案:

如何使用SocketRocket与socket.io?

从那里的答案,你可以看看socket.io-objc