我正在尝试编写一个TCP服务器,每当收到保证以“ \ n”结尾的消息时,它都会响应客户端。我看过类似this one的其他帖子,它们似乎在查看每个字符是否换行,但这似乎违反了将数据读入缓冲区的目的。有没有更好的方法来实现这一目标?

最佳答案

另一种方法是自己处理缓冲,例如:

std::string nextCommand;

while(1)
{
   char buf[1024];
   int numBytesRead = recv(mySocket, buf, sizeof(buf), 0);
   if (numBytesRead > 0)
   {
      for (int i=0; i<numBytesRead; i++)
      {
         char c = buf[i];
         if (c == '\n')
         {
            if (nextCommand.length() > 0)
            {
               printf("Next command is [%s]\n", nextCommand.c_str());
               nextCommand = "";
            }
         }
         else nextCommand += c;
      }
   }
   else
   {
      printf("Socket closed or socket error!\n");
      break;
   }
}


(请注意,为简单起见,我使用C ++ std :: string将数据保存在示例代码中;由于使用的是C,因此需要找到另一种方式来存储传入的字符串。如果可以保证,最大命令长度,您可以只使用固定大小的char数组和一个计数器变量;如果需要处理无限制的命令大小,则需要提出某种可以根据需要增长的数据结构,例如通过使用realloc()动态分配更大的缓冲区,或使用链接列表等)

08-16 23:55