AsyncSocket:始终侦听传入的TCP消息

时间:2015-04-24 12:47:48

标签: tcp cocoaasyncsocket

我希望有一个服务通过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:吗?或者是否有(更好的)方法来始终收听传入的消息?

1 个答案:

答案 0 :(得分:2)

对于你正在做的事情,这很好。你需要打电话 - [readDataWithTimeout]在-didReadData中,因为否则您只会收到来自服务器的第一条消息。 GCDAsyncSocket以这种方式设计,因为还有一些其他方法可以接收传入数据。