我用C语言编写了一个简单的TCP聊天。服务器的工作是从客户端接收消息并以相反的顺序发回。结果应如下所示:
客户:"您好"
服务器:" olleH"
当我申请" strlen()" to" olleH",返回的长度不是5,但7. 7也是read()函数返回的值。我在这里错过了什么?我知道char数组以' \ 0'结尾,但这并不能解释2个额外的字符。
循环应该在收到消息后结束" FINISH"。所以,我将收到的消息与char数组进行比较" FINISH"使用strcmp()。由于上面暴露的原因,它们从未被认为是相同的。我收到一条带有2个额外字符的消息。我已经尝试将收到的消息与" FINISH __"进行比较。 (解释' _'作为空格),但它也不会起作用。
do{
bzero(buffer, 1000);
n = read(client_socket, buffer, 1000);
if (n<0){
error("ERROR reading socket");
}
invert(buffer, inv); //inv is a buffer that stores the inverted array
n = write(client_socket, inv, n);
if (n<0){
error("ERROR writing in socket");
}
}while (strcmp(buffer, "FINISH\n") != 0);
感谢您的帮助。
答案 0 :(得分:1)
这篇文章可能有用: C Socket Write adding extra characters
当你从read中接收'n'时,它会给你读取的字节数的大小,而不是读取的文本的字符串长度。 你在写命令中写'n'。 我想'Hello'的长度为5,大小为7。 这可以解释7的大小。 使用strlen(缓冲区)或等效文件检查你的长度是多少。
答案 1 :(得分:1)
从服务器发送数据时,您必须输入Hello
,然后按ENTER
键,这只是\r\n
。所以客户端正在以Hello\r\n
的形式阅读它。所以你必须额外获得两个角色。我希望这个对你有用。您可以通过循环输入buffer
来检查这一点,并检查那里是否存在\r\n
。