我使用GCDAsyncSocket让iPhone客户端连接到一个运行在Windows服务器上的.Net服务器。连接很好,数据也能够成功发送。
然后,我告诉客户端在发送完数据后直接进入接收状态......
[sock readDataToData:[GCDAsyncSocket LFData] withTimeout:15 tag:1];
我还设置了接收以下内容:
- (void)onSocket:(GCDAsyncSocket *)sock didReadData:(NSData *)data
withTag:(long)tag
并且:
- (NSTimeInterval)socket:(GCDAsyncSocket *)sock shouldTimeoutReadWithTag:(long)tag
如果我等待超时,将调用超时方法。
如果我从服务器发送数据,则不会调用超时,因此我假设客户端已经看到了某些内容,但在客户端没有任何指示。
我还添加了:
- (void)socket:(GCDAsyncSocket *)sock didReadPartialDataOfLength: (NSUInteger)partialLength tag:(long)tag
希望我能看到部分数据包,但是这并没有被触发。如上所述,如果我从服务器发送一些数据到客户端,超时就不会触发。然而,我认为如果它没有收到终止字符,它也应该超时。我还尝试了使用长度为3的读取,但没有任何区别。GCDAsyncSocket 是问题所在,AsyncSocket 看起来工作正常。也许初始化有问题?dispatch_queue_t mainQueue = dispatch_get_main_queue(); asyncSocket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:mainQueue]。您有什么想法是我做错了什么吗?我在 Google 代码上发布了一个帖子,但没有任何活动,所以不确定是否会得到答案。最理想的情况是,如果有人有一个接收工作的示例代码,那就太棒了!谢谢!