AsyncSocket 如何实现多个客户端的连接到一个服务器?并能独立上传文件。

willowBK 2016-08-10 11:44:46
小弟,最近初次接触网络通讯,在做基于ios的socket,TCP的传输,在网上看了下选择第三方的cocoaAsyncSocket,能实现一对一的文件传输,进度条,断点续传什么的能实现。
但是当做多个客户端连接的时候的犯难了。还有以后的多个文件的同时上传的。
网上的有两种思路:1.用IO口复用,完全端口实现感觉不知道怎么用。原理比能理解感觉可行。但不知道如何去实现。
2.简单点的就是开线程先简单的用线程实现,感觉会容易点。局限三两台的连接。但是貌似需要换GCD AsyncSocket 这个有线程池什么的,开多线程不报错。
但我用AsyncSocket (异步)感觉是异步串行每次只能接收文件,接收完成,超时才接收下一个。不知道如何实现多个文件同时传输,是不是要开多个线程来接收。不知道在第三方库哪里开合适。

求大神指点下思路!!!!
//下面时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];
});
});

}
...全文
388 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

4,358

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧