- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我使用 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/
这是我的Objective-C代码...我也尝试过注释掉的代码,但是没有运气。我只是想让它连接。 @implementation ViewController - (void)viewDidLoad
我正在 Mac OS 上的 Swift 上编写简单的 Telnet 客户端。我正在连接到 localhost 上的端口 9052 并发送三个简单的命令。这是我的代码: import Cocoa imp
要包含的代码不多,但为什么 GCDAsyncSocket 客户端可能会在写入数据排队之前停止读取?症状: 虽然服务器调用“didAcceptNewSocket”,但“didConnectToHost”
在我的应用程序中,我使用 GCDAsyncSocket,并以这种方式写入和读取: NSData *bufferWriteData = [NSData dataWithBytesNoCopy:buffe
很容易理解,我们可以使用以下方式来识别传入消息的结束,例如:1. 将消息的长度放在数据本身之前2.使用分隔符 然而,GCDAsyncSocket提供了更全面/更智能/通用的解决方案。而且它似乎使用低级
GCDAsyncSocket 的文档说,在将可能更改的可变数据传递给写入函数之前,应该复制它。 在下面的代码中: func send(buffer: NSMutableData) { let
各位程序员大家好, 我正在尝试允许用户向其他用户发送推送通知(例如发送好友请求等)。 这里的最终目标是让我的 iOS 应用程序在用户登录到他们的帐户(也就是加载了特定 View )后持续监听特定的主机
我正在使用 GCD AsyncSocket 创建客户端应用程序以连接到由 SSLServer Socket 使用自签名证书创建的服务器 java。通过一种方式的身份验证,我可以很好地初始化 SSL 套
当我使用 GCDasyncsocket 从服务器(java)获取套接字消息时,它在 ios 模拟器(xcode 6,iphone6+)中工作;但是当我用我的iphone6+连接测试的时候,接收到大数据
我正在使用 GCDAsyncSocket (MRC/iOS5.1) 一段时间,尤其是“大”文件 (5 - 10 mb)。不幸的是,有时读取流永远不会完成(例如,它被卡住)只是在流末尾的几个字节; di
当我按下发送按钮时,客户端每次都发送消息,但服务器只在第一次接收消息。服务器有什么问题 服务器: - (void)viewDidLoad { [super viewDidLoad];
我一直在使用CocoaAsyncSocket在没有 SSL 的情况下将数据发送到我们的服务器。现在服务器端已经实现了带有客户端身份验证的 SSL/TLS。为了在我们的应用程序中实现这一点,我获得了以下
我正在制作一款多人 iOS 游戏,遇到了以下问题:我发送了一个字典,其中包含一组自定义对象。这些自定义对象符合 NSCoding。我将字典转换为 NSData,如下所示: NSData *data
我已经在使用 GCDAsyncSocket 连接 2 个设备。一个广播自身并接受连接,另一个监听并请求连接。如果我尝试将另一台设备连接到仍在广播的主机,它会连接然后在第一台设备仍处于连接状态时获得连接
我尝试连接到服务器并向服务器发送一些信息(例如用户名、密码..),然后服务器向我发送回 ID(字符串类型)。问题是我拿不到身份证。有人可以帮助我吗?我是 IOS 编码的初学者。谢谢。 代码如下: 点击
我正在为我的 iOS 项目使用 XMPP 和 OpenFire。互联网连接稳定。第一次登录时一切都很好。但是从第二次开始(注销然后再次登录),它很少起作用。我经常在 10-15 秒后收到 readTi
我正在为我的 iOS 消息应用程序使用 GCDAsyncSocket 库,并在后端使用 Twisted Server。一切都设置得很好并且工作正常,但是当它不能正常工作时,我发现了一个特殊的情况。因此
我能够通过 IP 和端口连接到所需的套接字。 - (void)socket:(GCDAsyncSocket *)sender didConnectToHost:(NSString *)host por
我是 GCD 原理和 GCDAsyncSocket 的新手,但我正在我的项目中使用它。我在 AppDelegate 中初始化 GCD 套接字: self.socket = [[GCDAsyncSock
我在 iOS 应用程序中使用 GCDasyncsocket 通过套接字连接发送字符串,然后通过同一套接字连接每秒读取一个字符串。我还在不同端口上的同一服务器上创建了第二个套接字,并且每秒读取一次。 我
我是一名优秀的程序员,十分优秀!