Как я могу создать "ostream" из сокета?

В С++, если у меня есть сокет, как я могу создать объект ostream из него?

У меня есть пример: http://members.aon.at/hstraub/linux/socket++/docu/socket++_10.html

И я попробовал:

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

Но я не могу найти файл .h и библиотеку для связи с 'sockbuf'. Является ли эта часть стандартной библиотеки С++?

Ответ 1

Сайт, который вы нашли, является сторонней нестандартной библиотекой. Нет стандартной библиотеки сокетов С++.

Однако, если вы хотите как можно ближе к стандартному (и мощному!) решению, вы должны попробовать 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 для асинхронной работы.

Ответ 2

Стандартный С++ (по крайней мере, С++ 98) никак не связан с сетью. Итак, вы должны сделать что-то конкретное для платформы.

На некоторых платформах реализованы реализации IOStreams, которые позволяют создавать поток из файлового дескриптора. В этом случае используйте дескриптор сокета в качестве дескриптора файла.

Ответ 3

Это не часть стандартной библиотеки С++. Скачать Socket ++ здесь: http://members.aon.at/hstraub/linux/socket++/ (это было несколько каталогов от того, что вы вставили)