如何从套接字创建“ostream”?

时间:2010-02-05 01:15:59

标签: c++ sockets

在C ++中,如果我有一个套接字,我怎样才能从中创建一个ostream对象?

我用google搜索了一些例子: http://members.aon.at/hstraub/linux/socket++/docu/socket++_10.html

我试过了:

 sockbuf sb(sockfd);
 std::ostream outputStream(&sb);

但我找不到.h文件和要与'sockbuf'链接的库。那是标准c ++库的一部分吗?

3 个答案:

答案 0 :(得分:19)

您找到的网站是第三方非标准库。没有标准的C ++套接字库。

但是,如果您希望最接近标准(且功能强大!)的解决方案,则应尝试Boost.Asio。已经提出将其包括在标准库(TR2)中。这是一个基于iostream的例子:

boost::asio::ip::tcp::iostream stream("www.example.org", "http");
stream << "GET / HTTP/1.0\r\nHost: www.boost.org\r\n\r\n" << std::flush;

std::string response;
std::getline( stream, response );

但是,如果使用Asio的Proactor进行异步操作,您将获得更多收益。

答案 1 :(得分:6)

标准C ++(至少C ++ 98)不以任何方式处理网络。所以,你必须做一些特定于平台的事情。

某些平台具有IOStreams实现,允许您从文件描述符创建流。在这种情况下,请使用套接字描述符作为文件描述符。

答案 2 :(得分:2)

它不是标准C ++库的一部分。在这里下载Socket ++:http://members.aon.at/hstraub/linux/socket++/(这是你粘贴的几个目录)