从套接字读取直到某个字符在缓冲区中

时间:2012-02-22 16:05:47

标签: c sockets berkeley-sockets

我正在尝试从套接字读取到缓冲区,直到使用read(fd, buf, BUFFLEN)到达某个字符。

例如,套接字将在一次读取调用中接收两个由空行分隔的信息。

是否可以将读取调用置于循环中,以便在到达此空白行时停止,然后如果需要,它可以在以后读取其余信息?

2 个答案:

答案 0 :(得分:3)

一种简单的方法是一次读取一个字节,直到前一个字节和当前字节是换行符,因为两个连续的换行符是一个空行:

size_t buf_idx = 0;
char buf[BUFFLEN] = { 0 };

while (buf_idx < BUFFLEN && 1 == read(fd, &buf[buf_idx], 1)
{
    if (buf_idx > 0          && 
        '\n' == buf[buf_idx] &&
        '\n' == buf[buf_idx - 1])
    {
        break;
    }
    buf_idx++;
}

如果要读取新发送的数据,则必须在某些时候读取任何未读数据。

答案 1 :(得分:0)

如果您想稍后访问此信息,仍需要从套接字读取,否则它将丢失。我认为最好的实现方法是保持循环读取套接字,同时启动另一个进程/线程以执行任何接收到空白时所需的操作。