我正在尝试编写一个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()动态分配更大的缓冲区,或使用链接列表等)