最近开发的项目有用到Asyncsocket框架进行TCP通信,遇到了关于如何将socket接收的信息准确发送给请求对象的问题。例如,对象A调用Socket单例发送了一个请求;于此同时,对象B也调用了该socket单例发送了一个请求;甚至还有对象C等等。当某一时刻,socket单例对象收到了服务器返回的信息,而此时,socket对象如何判断和精准的将该信息发送给相应的请求对象呢?还有就是当服务器返回信息时,当初发送请求的A、B、C等对象是否还存在否?简单的说就是socket单例如何与这些请求对象通信的问题。对象间的通信有协议委托、block、通知等。在此,我给大家推荐通过协议委托的方式实现的通信。主要代码如下:
1、先定义一个用于记录请求对象信息的模型类:
2、定义socket单例类
3、在- (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag回调方法中实现如下代码:
4、值得注意的是,在socket断开连接后,重新跟服务器建立连接时,需清空代理对象数组。
//断开连接回调
- (void)onSocketDidDisconnect:(AsyncSocket *)sock
{
//删除所有代理对象
[self.delegateArray removeAllObjects];
//重新建立连接
[self socketConnect];
}