从客户端读取长消息



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

我也尝试过使用malloc,但结果是一样的。我真的很奇怪为什么。。。

客户端代码做得很好,问题似乎出在服务器端。

这是代码的相关部分:

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

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

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

最新更新