4,358
社区成员
发帖
与我相关
我的任务
分享
//下面时GCD AsyncScoket的代理服务端的连接回调函数。当客户端连接时候调用。
//(小弟想在这代理函数中开线程。不知道对不对,连接上一个客户端开个线程,但是想到接收的时候也要在代理开多个对应的线程接收就感觉头大了,另外这个函数中后面的连接的客户端总是会覆盖前面的客户端,意思还是只能连接一台。不知道怎么弄)
- (void)socket:(GCDAsyncSocket *)sock didAcceptNewSocket:(GCDAsyncSocket *)newSocket
{
// 打印新的连接地址
print_function();// 1
NSLog(@"Accept new socket: %@:%u", newSocket.connectedHost, newSocket.connectedPort);
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSLog(@"thread = %@",[NSThread currentThread]);
//获得连接客户端的ip地址
ipString = newSocket.connectedHost;
remoteSocket = newSocket;
// 发送心跳检测
// 每隔60s像服务器发送心跳包
self.connectTimer = [NSTimer scheduledTimerWithTimeInterval:60 target:self selector:@selector(longConnectToSocket) userInfo:nil repeats:YES];// 进行长连接需要向服务器发送的讯息
[self.connectTimer fire];
dispatch_async(dispatch_get_main_queue(), ^{
SingletonInstance * singleton = [SingletonInstance sharedSingleton];
[singleton.connectClientArray addObject:ipString]; //添加连接客户端的IP
//刷新连接数
[[NSNotificationCenter defaultCenter] postNotificationName:@"ClientConnect" object:nil];
});
});
}