C套接字编程recv大小

时间:2015-01-13 13:46:19

标签: sockets

我是套接字编程的新手(在C中),也许这个问题有点愚蠢。在C套接字编程中,我该如何确定函数recv()/ read()的缓冲区大小?在许多情况下,我们不知道使用send()/ write()发送的数据大小。非常感谢!

2 个答案:

答案 0 :(得分:0)

  

我该如何确定函数缓冲区的大小   的recv()/读()

理想情况下,不应该查看这些缓冲区并保持旧的TCP模型:在字节可用时继续读取字节。

如果你问这个问题是这样的:“我收到的缓冲区应该有多大?”,简单的答案是选择一个大小然后传递它。 如果有更多数据可以再次阅读


回到原来的问题,不同的堆栈会为您提供不同的API。例如,在某些Unix上,您有SIOCINQFIONREAD之类的内容。这些内容为您提供内核在其接收缓冲区中的数据量,等待您将其复制出来。

答案 1 :(得分:0)

如果您真的不知道预期有多少字节,请使用大缓冲区并将大缓冲区大小传递给recv / read。这些函数将返回放入缓冲区的字节数。然后你可以处理打印它的数据,例如。

但请记住,数据通常以已知大小的块发送,或者在第一个字节中以消息大小发送,因此接收方能够识别应读取的字节数。