从TCP套接字接收完整消息

时间:2010-09-14 08:54:05

标签: objective-c sockets tcp nsstring nsdata

我从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 个答案:

答案 0 :(得分:3)

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

相关问题