小弟,最近初次接觸網路通訊,在做基于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];
});
});
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/129786.html
標籤:網絡通信
上一篇:關于IP分片問題
下一篇:奇怪的現象,希望有大神幫助一下
