- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
要包含的代码不多,但为什么 GCDAsyncSocket 客户端可能会在写入数据排队之前停止读取?症状:
奇怪的是,调用“writeDelayed”方法(仅将“writeData”方法排入队列)可以正确处理所有读取。从方法中删除“writeData”会禁用读取。
这让我认为配置的 GCD 调度队列是错误的,所以我尝试了所有可能的新的和默认的串行和并发队列
或者说套接字对象提前释放了,所以我把它设为类属性,但没有用。
可能使事情复杂化的一件事(虽然我不知道如何)是,正在建立连接以响应已解析的 NSNetService (Bonjour) 对象,该对象可能位于不同的调度队列中。但是我尝试将“setupConnection”包装在一个要在主队列上执行的 block 中,但无济于事。
这里有少量代码,如果有问题我会编辑。
谢谢,詹姆斯
-(void)setupConnection
{
self.queue = dispatch_queue_create(NULL, DISPATCH_QUEUE_SERIAL);
self.socket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:self.queue];
}
-(void)connect
{
NSError *error = nil;
if(![self.socket connectToHost:self.socketInfo.address onPort:self.socketInfo.port error:&error])
{
NSLog(@"I goofed: %@", error);
}
NSLog(@"Connecting to: %@:%i",self.socketInfo.address,self.socketInfo.port);
}
-(void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(uint16_t)port
{
NSLog(@"Connected");
[self.socket readDataToData:[GCDAsyncSocket CRLFData] withTimeout:-1 tag:0];
}
-(void)writeDelayed
{
double delayInSeconds = 2000000.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
NSData* dataObj = [GCDAsyncSocket CRLFData];
[self.socket writeData:dataObj withTimeout:-1 tag:1];
});
}
...
最佳答案
答案是我的对象链中较高的对象之一被提前释放,导致套接字也被提前释放。这似乎是对智者的话。
关于ios - GCDAsyncSocket 客户端在写入之前不读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15845207/
这是我的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 通过套接字连接发送字符串,然后通过同一套接字连接每秒读取一个字符串。我还在不同端口上的同一服务器上创建了第二个套接字,并且每秒读取一次。 我
我是一名优秀的程序员,十分优秀!