gpt4 book ai didi

iphone - GCDAsyncSocket - 未接收数据 - AsyncSocket 工作正常

转载 作者:太空狗 更新时间:2023-10-30 03:40:18 25 4
gpt4 key购买 nike

我使用 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]

知道我做错了什么吗?

我为此在护目镜代码上发了一个帖子,但没有任何事件,所以不确定我是否会得到答案。

理想情况下,如果有人有接收工作的示例代码,那就太好了!谢谢!

最佳答案

也许拼写有问题。 (所以这发生在我身上,我一直在寻找几个小时,直到我看到微小的差异)

GCDAsyncSocket 将所有委托(delegate)回调从 onSocket 重命名为 socket 以匹配 Apple 的命名风格。

在你上面的例子中你提到了

- (void)onSocket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag 

重命名为

- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag 

这应该可以解决该问题。

在我的代码中我也遇到了另一个问题。确保调用 GCDAsyncSocket 的对象在连接时仍然存在。 GCDAsyncSockets 委托(delegate)是对您的对象的弱引用。因为它是异步的,所以当套接字响应时,委托(delegate)可以变为零(自动释放,或者实例是在一个已经离开的方法中创建的)。结果它似乎没有被调用,但是启动套接字的类已经从内存中释放。如果您将 ARC 与 GCDAsyncSocket 一起使用,尤其会发生这种情况。

希望对你有帮助

关于iphone - GCDAsyncSocket - 未接收数据 - AsyncSocket 工作正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6548458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com