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

时间:2017-11-10 09:50:03

标签: c sockets modulo

我正在学习C语言的套接字编程,并且我已经让服务器和客户端进行通信并且没有任何问题地发送消息,但我需要一种方法让客户端知道它应该接收多少字节。分配的一部分是制作一个标题,其中包括校验和,它应该是number_of_bytes_sent%32的二进制形式。我已经让服务器制作并发送标题就好了,但我有点难过如何我可以从该信息中获取我应该接收的字节数。

1 个答案:

答案 0 :(得分:2)

你需要在两侧缓冲(发射和接收)。您需要拥有并遵循一些关于如何组织请求和回复的约定。在应用程序级别,您的协议应该知道答复或请求(更常见的是任何应用程序消息)的开始和结束位置。研究示例HTTPSMTP

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

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

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

0mq这样的图书馆可以提供帮助(而且他们是free software,因此您可以并且可能应该研究他们的源代码)。另请参阅HTTP库(客户端libcurl,服务器端libonion)。

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

  

关于如何获得我应该接收的字节数,我有点难过

可能会要求您定义应用程序协议。然后,您可以将消息(或内容)长度放在应用程序标头中。 <{3}}中的Content-length:属性可能具有启发性。