Как я могу создать «ostream» из сокета? - PullRequest
13 голосов
/ 05 февраля 2010

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

Я гуглил несколько примеров: http://members.aon.at/hstraub/linux/socket++/docu/socket++_10.html

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

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

Но я не могу найти файл .h и библиотеку для ссылки на 'sockbuf'. Это часть стандартной библиотеки c ++?

Ответы [ 3 ]

19 голосов
/ 05 февраля 2010

Найденный вами сайт является нестандартной нестандартной библиотекой. Стандартной библиотеки сокетов 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 для асинхронной работы.

6 голосов
/ 05 февраля 2010

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

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

2 голосов
/ 05 февраля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...