c++ - 如何准确阅读一行?

标签 c++ sockets file-descriptor

我有一个 Linux 文件描述符(来自套接字),我想读取一行。 如何用 C++ 实现?

最佳答案

如果您正在从 TCP 套接字读取数据,您无法假设何时会到达行尾。 因此你需要这样的东西:

std::string line;
char buf[1024];
int n = 0;
while(n = read(fd, buf, 1024))
{
   const int pos = std::find(buf, buf + n, '\n')
   if(pos != std::string::npos)
   {
       if (pos < 1024-1 && buf[pos + 1] == '\n')
          break;
   }
   line += buf;
}

line += buf;

假设您使用“\n\n”作为分隔符。 (我没有测试那个代码片段 ;-) )

在 UDP 套接字上,那就是另一回事了。发射器可以发送一个包含整行的 paquet。接收方保证将 paquet 作为一个单元接收。如果接收到它,UDP 当然不如 TCP 可靠。

关于c++ - 如何准确阅读一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1583353/

相关文章:

c++ - 运行时检查失败 #2 S C++

c++ - 确定应用程序编译时是否使用 _DEBUG 宏

python - 使用socket编程Python发送图片

java.nio.SocketChannel 始终返回相同的数据

c - 在一个进程 fork 并且我们有一个新的克隆进程之后,关闭子表中的文件会影响父表中的表吗?

c++ - 连接来自另一个在 Qt 中不起作用的类的插槽

c++ - 在结构中重载函数调用运算符()/参数会发生什么?

c# - 通过 ssl 套接字流式传输图像未正确显示

c - 如何从用户 ID 中检索用户名

linux - dup2 真的可以返回 EINTR 吗?