从服务器获取数据时知道要接收多少

Knowing how much to receive when getting data from server

我正在学习 C 的套接字编程,我已经让服务器和客户端毫无问题地交谈和发送消息,但我需要一种方法让客户端知道它应该接收多少字节。作业的一部分是制作一个 header,其中包括一个校验和,它应该是 number_of_bytes_sent % 32 的二进制形式。我已经让服务器制作并发送了 header很好,但是对于如何从该信息中获取应该接收的字节数,我有点困惑。

您需要在两侧(发射和接收)进行缓冲。您需要拥有并遵循一些关于如何组织请求和回复的约定。在应用程序级别,您的协议应该知道回复或请求(更普遍的是任何应用程序消息)从哪里开始和结束。研究示例 HTTP and SMTP.

请记住,TCP 套接字只是字节流没有消息边界

因此,客户端可能会成功 send 一个 1 千字节的片段的单个消息,并且服务器可以 recv 两个 512 字节的片段。反过来也可能发生。而且碎片是随机的,所以不可重现。

路由器——尤其是 Wifi 路由器——可以(并且确实)对 TCP/IP 数据包进行分段(甚至有时通过连接它们来进行碎片整理)。

像服务器端的 0mq could help (and they are free software, so you can and probably should study their source code). Look also into HTTP libraries (libcurl on client side, libonion 这样的库。

如果您自己实现了一些套接字,请阅读 poll(2) and socket(7) (and tcp(7) and unix(7))。

I'm a bit stumped as to how I can get the number of bytes I'm supposed to receive

可能要求您定义应用程序协议。然后您可以将消息(或内容)长度放入您的应用程序 header。 HTTP headers 中的 Content-length: 属性可能会鼓舞人心。