cocoa asyncsocket 使用中遇到的问题

AsyncSocket连接服务器的问题
用AsyncSocket连接服务器时,不管服务器有没有开,[client connectToHost:hostIP onPort:hostPort error:&err]这一句一直返回YES,这是为什么?


所以我都是在- (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port

这个里面来判断服务器是否连接成功,成功后才发请求



用asynsocket的过程中,遇到这样一个情况,我发消息,SERVER是可以收到的。但是SERVER收到后,会默认返回个消息给我,我总是收不到,无法在这个函数里收到消息。

- (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag


// 添加事件响应函数
A:- (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port;
B:- (void)onSocketDidSecure:(AsyncSocket *)sock;
C:- (void)onSocket:(AsyncSocket *)sock willDisconnectWithError:(NSError *)err;
D:- (void)onSocketDidDisconnect:(AsyncSocket *)sock;
E:- (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag;

// 在函数A中请求读取数据, AsyncSocket内部会在有接收到数据的时候调用函数E
[_client readDataWithTimeout:-1 tag:0];

// 函数E被调用过之后这个读取请求就结束了,我们不想让它结束掉, 所以在函数E结尾处加入, 这样读取过程就可以一直持继下去了
[_client readDataWithTimeout:-1 tag:0];

 

这个库若想监听网络,必须先设置[socket readDataWithTimeout:-1 tag:0];这里面的tag很重要。如果你写的时候用的tag与读的不相同,那么永远在回调的地方没有回复。
当读的时候,需要判断长度是否足够,如果不够需要再次设置[socket readDataWithTimeout:-1 tag:0];
如果你需要保持这条链路,就不要用它的超时,因为默认超时,会断开连接。你再超时回调处,再次设置时间,也只是延长等待时间,到点仍是断链。


你可能感兴趣的:(cocoa asyncsocket 使用中遇到的问题)