从客户端读取长消息

时间:2020-04-06 03:50:14

标签: sockets network-programming malloc buffer

我试图从客户端读取一条长消息,然后打印到服务器stdout,但是当我运行代码时,几乎每次从客户端读取的数据长度都是不同的...

我也尝试使用malloc,但结果相同。我真的很想知道为什么...

客户端代码制作精良,问题似乎出在服务器端。

这是代码的相关部分:

char buf[MAX];    //MAX=1024;
memset(buf, '\0', sizeof(buf));
size_t b;

while ((b = read(connect_fd, buf, MAX - 1)) > 0) {
    buf[b] = '\0';
    printf("%s", buf);
    flush(stdout);
    write(coonect_fd, buf, strlen(buf));
    memset(buf, '\0', MAX);
}

1 个答案:

答案 0 :(得分:0)

此读取循环似乎还可以,服务器代码或客户端代码中的其他地方可能存在问题。以下是一些潜在问题的指针:

  • 无需使用memset()清除数组。
  • b应该定义为ssize_t,以检测read错误并避免在read()返回-1时出现未定义的行为。
  • 严格不需要设置空终止符:您可以使用printf("%.*s", (int)b, buf);fwrite(buf, 1, b, stdout);
  • 写入coonect_fd时,请使用b而不是strlen(buf)
  • 确保客户端将其输出刷新到套接字。