gpt4 book ai didi

c++ - 如何在 C++ 的 Linux 中通过套接字从客户端读取输入?

转载 作者:行者123 更新时间:2023-11-30 04:32:23 24 4
gpt4 key购买 nike

我的目标是创建一个用 C++ 编写的应用客户端服务器。当服务器从客户端读取输入时,应该处理该字符串并给出输出。基本上,我有一个发送相同消息的简单回显服务器。但是如果用户键入一个特殊的字符串(比如“quit”),程序就必须做其他事情。我的问题是这个没有发生,因为字符串之间的比较不起作用......我不知道为什么!这是一个简单的代码:

  while(1) {
int num = recv(client,buffer,BUFSIZE,0);
if (num < 1) break;
send(client, ">> ", 3, 0);
send(client, buffer, num, 0);

char hello[6] ="hello";
if(strcmp(hello,buffer)==0) {
send(client, "hello dude! ", 12, 0);
}

buffer[num] = '\0';
if (buffer[num-1] == '\n')
buffer[num-1] = '\0';
std::cout << buffer;
strcpy(buffer, "");
}

为什么比较不起作用?我尝试了很多解决方案......但都失败了:(

最佳答案

buf 中的数据可能不是 NULL 终止的,因为 buf 如果未初始化则包含随机数据。您只知道前 num 个字节的内容。因此,在比较字符串之前,您还必须检查收到了多少数据:

const char hello[6] ="hello";
size_t hello_sz = sizeof hello - 1;
if(num == hello_sz && memcmp(hello, buffer, hello_sz) == 0) { ...

作为旁注,除非您分隔消息,否则此协议(protocol)将是脆弱的,因此在读取碎片的情况下(第一次读取时收到“hel”,第二次读取时收到“lo”)您可以分辨出一条消息的开始位置和另一个结束。

关于c++ - 如何在 C++ 的 Linux 中通过套接字从客户端读取输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7702612/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com