我试图从客户端读取一条长消息,然后打印到服务器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)
- 确保客户端将其输出刷新到套接字