代码之家  ›  专栏  ›  技术社区  ›  Daniel Murali

从TCP套接字接收完整消息

  •  0
  • Daniel Murali  · 技术社区  · 14 年前

    我从TCP套接字连接读取数据,但服务器会不时地向我发送\0(这将标记消息的结尾)。因此,我没有得到其余的信息。

    我是这样读的:

    uint8_t buf[tcpBufferSize];
    unsigned int len = 0;
    
    len = [inputStream read:buf maxLength:tcpBufferSize];
    
    if(len > 0) {
        NSMutableData* data=[[NSMutableData alloc] initWithLength:0];
        [data appendBytes: (const void *)buf length:len];
        NSString *s = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    
        //here s will be only the part before the \0
    
        [s release];
        [data release];
    }
    

    例如,如果服务器发送abc \0de y,则仅获取abc,因为\0标记结束。

    我怎样才能收到全部信息??

    1 回复  |  直到 14 年前
        1
  •  3
  •   dreamlax    14 年前

    你很可能收到了整个消息。字符串用于保存文本,而不是字节数据。如果要保留所有数据,包括空字符,则需要将其保留为 NSData 对象。如果要提取某些字节并将其解释为文本,则必须自己实现。