【发布时间】:2017-01-08 18:07:49
【问题描述】:
我正在尝试在 Linux 中学习客户端服务器模型,并且我已经设置了两个 C 文件,即 server.c 和 client.c。这些是我似乎有问题的代码 sn-ps。
server.c 代码 sn-p
char* message = "<query>\n";
write(client_socket_filedescriptor, message, sizeof(message));
client.c 代码 sn-p
char* message = "<query>\n";
read(socket_filedescriptor, buffer, sizeof(buffer));
printf("%s", buffer);
printf("\n\n");
printf("%s", message);
现在,当我运行我的服务器,然后当我运行我的客户端时,我希望 printf 语句打印相同的字符串 <query>\n,但我不断得到 buffer 和 message 变量的不同输出。
当我运行客户端代码时,输出看起来有点像这样。
如您所见,这两个字符串是不同的。我正在尝试模拟典型的 TCP 握手,并且我想确保这两个字符串相同,然后客户端将开始使用该服务器编写或执行某些操作。但我有这个微不足道的问题。谁能告诉我如何解决它?我打算使用 strcmp 来比较缓冲区和消息变量,但就目前而言,strcmp 不会返回 0,因为它们毕竟是不同的字符串。
【问题讨论】:
-
sizeof(message)-->strlen(message)+1 -
所以你的意思是我应该把
sizeof(message)改成strlen(message)?如果是这样,我收到一个错误,因为读取调用只读取第一个字符。 -
是的,你需要改变它——
sizeof(message)给出的是指针的大小,而不是它所指向的大小。如果您仍然遇到错误,那么显然您的程序中还有其他错误。例如,假设read将始终接收整个消息是一个常见错误。read必须始终在循环中调用,并检查其返回值以确定读取了多少字节。如果您需要进一步的帮助,请提供minimal reproducible example。
标签: c linux sockets client-server