提升,使用tcp通过网络发送文件,首选方法?

时间:2009-04-06 09:43:29

标签: c++ sockets boost tcp stream

在文档中的boost示例中,tcp:iostream用于非常简单地通过网络发送流。在其他示例中,write()用于将数据写入套接字,而不是涉及更多代码。

这两种方法有什么区别?优点和缺点?是否还应该使用其他东西呢?

2 个答案:

答案 0 :(得分:2)

我从未使用过boost API,所以读者要注意......;)

tcp :: iostream似乎允许您使用类似流的接口与套接字进行交互。这种方法抽象出与套接字编程相关的复杂性,因此如果您不熟悉套接字编程,这将是更好的选择。它对基于TCP的数据共享很有意义。如果您进行非常简单的数据交换(例如请求/响应),则会特别方便。

但是,有些情况下您需要对数据交换进行较低级别的控制。如果您的接收器同时收到大量消息,您可能更喜欢从套接字读取每条消息,而不是在iostream之后处理它们。在发送方,如果您的消息被构造为对象,则通常更容易发送对象而不是首先将对象转换为流。在这种情况下,读/写功能更可取。

从我自己的(非升级)套接字编程经验来看,我通常更喜欢处理低级函数,因为它给了我更大的灵活性,即使它稍微复杂一些。我希望有所帮助。

答案 1 :(得分:1)

我没有使用boost来进行网络通信,但我想“ip :: tcp”类的一组包装了基于套接字的c ++通信。使用boost方法可能更简单,因为它已经实现了异步通信。 正常的套接字通信是灵活的,但很麻烦。仅在应用程序性能至关重要时才使用它。 但是“ip :: tcp”存在一些陷阱,例如每次向它写入内容时都必须刷​​新流(<< std :: flush),但我认为这些优点会影响缺点。