1

我想要一个通过 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:再次打电话给我,这是正确的吗?还是有一种(更好的)方法来始终收听传入的消息?

4

1 回答 1

2

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

于 2015-04-27T14:03:25.597 回答