从C读取套接字

时间:2016-04-21 07:33:36

标签: c sockets

当我使用read()套接字从服务器检索字节时,我在字符中发现了一些意想不到的东西。

以下是我的代码:

Char buf[80];
Char output[80];
if ( (count = read(socket_d, buf, 80)) == -1) {
        perror("Error on read call");
        exit(1);
    }
strcat(output, buf);
printf("Client read %d bytes\n", count);       
while (count==80) {
    memset(&buf, 0, sizeof(buf));
    if ( (count = read(socket_d, buf, 80)) == -1) {
        perror("Error on read call");
        exit(1);
    }
    printf("Client read %d bytes\n", count);
    strcat(output, buf);
}
/* print the received message */
printf("\n%s\n\n", output);

输出如下:

Client read 80 bytes
Client read 80 bytes
Client read 8 bytes
Your messages:
1:From User1, 04/21/16 02:12 AM, MSG1
2:From User2, 04/21/16 02:162 AM, MSG2
3:From User2, 04/21/16 02:12 AM, MSG3
4:From User1, 04/21/16 02:12 AM6, MSG4

期望输出应为:

Client read 80 bytes
Client read 80 bytes
Client read 8 bytes
Your messages:
1:From User1, 04/21/16 02:12 AM, MSG1
2:From User2, 04/21/16 02:12 AM, MSG2
3:From User2, 04/21/16 02:12 AM, MSG3
4:From User1, 04/21/16 02:12 AM, MSG4

似乎第二个循环中的char('6')中显示了意外的buf[]

当我定义每次read()套接字的大小时,所以我想循环读取,直到读取量小于limit_size,然后输出。

在循环过程中我应该如何处理buf[]以避免意外的字符?

1 个答案:

答案 0 :(得分:0)

1- output

中未初始化使用
strcat(output, buf);

2- memset想要一个指针而buf已经(衰变成)一个指针

memset(&buf, 0, sizeof(buf));

应该是

memset(buf, 0, sizeof(buf));

3-如果count == 80您的缓冲区中没有空格可用于NUL,请将buf声明为char buf[81];(或read 79字节)并且忘记在\0

之后使用read()结束字符串
buf[count] = '\0';