我试图从客户端读取一条长消息,然后打印到服务器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);
}
答案 0 :(得分:0)
此读取循环似乎还可以,服务器代码或客户端代码中的其他地方可能存在问题。以下是一些潜在问题的指针:
memset()
清除数组。b
应该定义为ssize_t
,以检测read
错误并避免在read()
返回-1
时出现未定义的行为。printf("%.*s", (int)b, buf);
或fwrite(buf, 1, b, stdout);
。coonect_fd
时,请使用b
而不是strlen(buf)
。