tcp - 异步套接字 : always listen to incoming TCP messages

标签 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];

然后在读取委托(delegate)方法中:

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

我立即再次调用 readDataWithTimout:tag: 是否正确?或者是否有一种(更好的)方式来始终收听传入的消息?

最佳答案

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

关于tcp - 异步套接字 : always listen to incoming TCP messages,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29847936/

相关文章:

blackberry - 黑莓 API 是否允许黑莓通过 TCP/IP 连接到桌面?

ios - Swift:使用 GCDAsyncUdpSocket 接收 UDP

objective-c - cocoa asyncudp套接字不发送字节流

iphone - AsyncSocket TLS 指南

swift - 我无法使用 protobuf-swift CodeOutputStream 将流写入 NSData?

c - 如果我使用 select() 轮询方法,我应该将套接字设置为非阻塞吗?

c# - .NET TCP 协议(protocol)有多可靠?

ios - swift 2 : Binary operator '==' cannot be applied to operands of type '()?' and 'Bool'

c - 为什么套接字读取的数据多于实际发送的数据?

c++ - 成员变量在评估之前未正确更新