【发布时间】:2015-02-16 07:20:11
【问题描述】:
到目前为止,我所发现的关于使用套接字 (recv) 接收数据的所有内容都是用普通的旧 C 语言编写的。
即使是 C++,它也可以在 std::vector<char>(哇!)或defining a static size(例如vec.resize(BIG_NUMBER))上逐字节接收,然后再接收。
然而,所有这些看起来都非常低效和/或丑陋,所以我想知道,在 C++ 中最有效、正确和优雅的方法是什么? (不是 C)
网络浏览器就是一个很好的例子,说明某人需要在哪里接收未知数量的数据。 (为了示例,忽略 Content-length 标头)
【问题讨论】:
-
您可以尝试使用带有抽象的库。例如,试试 Poco。
-
不使用recv,而是使用C++函数?没有更优雅的“使用recv”方式。您必须“不使用它”,而使用其他东西。
-
@sashoalm 不,我知道
recv是 C API,而不是 C++。我的问题是指在 C 中,您需要自己进行内存分配,而在 C++ 中,可能有一种方法可以避免它;我想知道是否有这样的方法。 -
@AcidShout 所以你问recv是否可以告诉你向量的大小?那么是的,它可以,但是问题标题应该是“找出recv所需的缓冲区大小”或类似的东西。见stackoverflow.com/questions/2862071/…
-
@sashoalm 不,因为链接的问题就是这样做的(或多或少)。我的意思是完全抽象掉内存分配部分(包括大小)。就像
std::string的“魔法”。