【发布时间】:2020-04-06 03:50:14
【问题描述】:
我正在尝试从客户端读取一条长消息然后打印到服务器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);
}
【问题讨论】:
-
TCP 级别没有数据包(或消息)。有一个字节流。在情况允许的情况下,您将从内核中读取尽可能多的字节。由您的应用程序将字节流拆分为消息。基本上在消息的开头(序列化结构)你会放置一些 ID 和长度。在接收端,您可以预先分配所需的内存量(根据 ID/长度)以在多次顺序读取中接收对象。顺便说一句,你不需要
memset -
文档中没有任何地方说
read()填充了缓冲区。 -
如何放置ID和长度...?
标签: sockets network-programming malloc buffer