gpt4 book ai didi

c - 通过 C 中的 TCP 套接字传输后的字符串比较

转载 作者:可可西里 更新时间:2023-11-01 02:50:40 25 4
gpt4 key购买 nike

我正在通过 TCP 发送一个文件,并让服务器发送一条包含“END_OF_MESSAGE”的消息来提醒客户端他们已经收到了整个文件并可以关闭套接字。正在发送文件,客户端收到“END_OF_MESSAGE”字符串,但是,当我使用 strcmp 将收到的信息与“END_OF_MESSAGE”进行比较时,它从来没有说它们匹配。我已经尝试过 strncmp 和 memcmp,但对为什么 strcmp 不告诉我字符串匹配感到困惑。

代码片段:

服务器:

char endMessage[MESSAGESIZE] = "END_OF_MESSAGE";

if ((send(clntSocket, endMessage, sizeof endMessage, 0))!= sizeof endMessage) DieWithError("Sending failed");

上面的代码片段确实被发送了。

客户:

  if ((bytesRcvd = recv(sock, echoBuffer, RCVBUFSIZE - 1, 0)) <= 0)
DieWithError("recv() failed or connection closed prematurely");
totalBytesRcvd += bytesRcvd; /* Keep tally of total bytes */
echoBuffer[bytesRcvd] = '\0'; /* Terminate the string! */
if (!(strcmp(echoBuffer, "END_OF_MESSAGE")==0)){
printf(echoBuffer); /* Print the echo buffer */
printf("\n");
}else{
break; //break out of while loop
}

echoBuffer 的 strcmp 和“END_OF_MESSAGE”从不返回 0,即使“END_OF_MESSAGE”是我从服务器发送的内容。我已经尝试用 strncmp 比较前 3 个字符(“END”)无济于事。

注意:当我打印出 echoBuffer 时,最后一个确实打印出 END_OF_MESSAGE,这只会让我更加困惑。

有没有人知道我做错了什么?

谢谢。

最佳答案

am sending a file through TCP, and have the server sending a message containing "END_OF_MESSAGE" to alert the client that they have received the whole file and can close the socket.

为什么?只需关闭 socket 即可。这将告诉客户完全相同的事情..

您正在尝试的事情充满了困难。如果文件包含 END_OF_MESSAGE 会怎样?您将需要一个转义约定,以及一个用于转义的转义,并在发送和接收时检查所有数据。

您看到的实际问题是 END_OF_MESSAGE 可以与文件的最后一位一起到达,因此它不在缓冲区的开头。

但这一切都没有意义。只需关闭套接字即可。

关于c - 通过 C 中的 TCP 套接字传输后的字符串比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43308285/

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