在C中的简单聊天中用read()读取的神秘数量的字符?

时间:2015-06-09 15:45:27

标签: c sockets chat

我用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);

感谢您的帮助。

2 个答案:

答案 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