AsyncSocket: всегда слушать входящие сообщения TCP

Я хотел бы иметь службу, которая подключается через TCP к серверу, а затем постоянно прослушивает входящие данные. Я использую CocoaAsyncSocket, который я использую следующим образом:

self.socket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
NSError *err = nil;
if (![self.socket connectToHost:@"..." onPort:... error:&err]) {
    return;
}

[self.socket readDataWithTimeout:-1 tag:1];

а затем в методе делегата чтения:

- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag {
    NSLog(@"%@", data);
    [self.socket readDataWithTimeout:-1 tag:1];
}

это правильно, что я немедленно снова звоню readDataWithTimout:tag:? Или есть (лучший) способ всегда слушать входящие сообщения?


person swalkner    schedule 24.04.2015    source источник


Ответы (1)


Для того, что вы делаете, это нормально. Вам нужно вызвать -[readDataWithTimeout] в -didReadData, иначе вы получите только первое сообщение с сервера. GCDAsyncSocket разработан таким образом, потому что есть несколько других способов получения входящих данных.

person Atomix    schedule 27.04.2015