首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS: GCDAsyncSocket及其标签

iOS: GCDAsyncSocket及其标签
EN

Stack Overflow用户
提问于 2014-07-17 17:37:39
回答 1查看 1.5K关注 0票数 0

在我的应用程序中,我使用GCDAsyncSocket并以这种方式编写和阅读:

代码语言:javascript
复制
NSData *bufferWriteData = [NSData dataWithBytesNoCopy:bufferWrite length:17 freeWhenDone:YES];
[self.socket writeData:bufferWriteData withTimeout:-1 tag:1];
[self.socket readDataWithTimeout:-1 tag:1];

在读取委托方法后,数据:

代码语言:javascript
复制
- (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];
    }

在这个委托方法中,我回忆起"readDataWithTimeout“,因此以这种方式读取所有数据。

问题是当我打新电话时,如果是这样的话:

代码语言:javascript
复制
[self.socket writeData:bufferWriteData withTimeout:-1 tag:2];
[self.socket readDataWithTimeout:-1 tag:2];

我用tag =2启动一个新的写和一个新的读;当委托方法"didReadData“被调用时,我的代码进入标记=1的块中;它似乎不识别新的标记。

为什么会这样?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-20 13:33:12

有几种方法可以解决这个问题。在您的例子中,最好的方法可能只是使用终止符来指示数据段的结束。你可以在上面读到:TCP是一个流。

代码语言:javascript
复制
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
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24810076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档