我正在尝试编写一个TCP服务器,只要收到保证以“\ n”结尾的消息,就会响应客户端。我看过像this one这样的其他帖子似乎在查看每个单独的字符,看它是否是一个新行,但这似乎违背了将数据读入缓冲区的目的。有没有更好的方法来实现这一目标?
答案 0 :(得分:1)
另一种方法是自己处理缓冲,例如:
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,所以您需要找到另一种方法存储传入的字符串。如果你能保证最大的命令长度,你可以使用固定大小的字符数组和计数器变量;如果你需要处理无限的命令大小,那么你需要提出一些一种可以根据需要增长的数据结构,例如通过使用realloc()或使用链接列表等动态分配更大的缓冲区