繁体   English   中英

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

[英]Reading from a socket until certain character is in buffer

我试图从套接字读入缓冲区,直到使用read(fd, buf, BUFFLEN)到达某个字符为止。

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

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

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

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++;
}

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM