- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的应用程序中,我使用 GCDAsyncSocket,并以这种方式写入和读取:
NSData *bufferWriteData = [NSData dataWithBytesNoCopy:bufferWrite length:17 freeWhenDone:YES];
[self.socket writeData:bufferWriteData withTimeout:-1 tag:1];
[self.socket readDataWithTimeout:-1 tag:1];
在我读取委托(delegate)方法中的数据后:
- (void) socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag{
NSLog(@"did read data");
if (tag == 1){
//analyze my data...
[self.socket readDataWithTimeout:-1 tag:1];
}
在这个委托(delegate)方法中,我记得“readDataWithTimeout”,所以通过这种方式我读取了所有数据。
当我进行新调用时的问题 ID(如果我这样做):
[self.socket writeData:bufferWriteData withTimeout:-1 tag:2];
[self.socket readDataWithTimeout:-1 tag:2];
我使用 tag = 2 开始新的写入和新的读取;当调用委托(delegate)方法“didReadData”时,我的代码进入 tag = 1; block 内它似乎无法识别新标签。
为什么会这样?
最佳答案
有几种方法可以处理这个问题。在您的情况下,最好的方法可能只是使用终止符来指示该数据段的结尾。你可以在那里阅读:TCP is a stream.
NSData *MyCommandTerminator(void)
{
return [NSData dataWithBytes:"\x0D\x0A\x0B\x0A" length:4];
}
//callback from Asyncsocket for incoming data
- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag //sender and receiver
{
NSLog(@"GCDAsyncSocket didreaddata");
// do what you wish with data and read again using a terminator
[sock readDataToData:MyCommandTerminator() withTimeout:-1 tag:1]; //tag is not being used here
}
// your method to send data
-(void)sendData:(NSData *)data
{
// NSData *bufferWriteData = [NSData dataWithBytesNoCopy:bufferWrite length:17 freeWhenDone:YES];
NSLog(@"Sendata wehere _peerSocket is your instance of GCDAsyncSocket");
NSMutableData *myData = [[NSMutableData alloc] initWithData:data];
[myData appendData:MyCommandTerminator()];
[_peerSocket writeData:myData withTimeout:-1 tag:2]; // tag is not being used here
}
关于iOS:GCDAsyncSocket 及其标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24810076/
这是我的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 通过套接字连接发送字符串,然后通过同一套接字连接每秒读取一个字符串。我还在不同端口上的同一服务器上创建了第二个套接字,并且每秒读取一次。 我
我是一名优秀的程序员,十分优秀!