我使用 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]
任何想法我做错了什么?
我为此在护目镜代码上发了一个帖子,但没有任何活动,所以不确定我是否会得到答案。
理想情况下,如果有人有一个接收工作的示例代码,那就太好了!谢谢你!