2010-02-05 15 views

Respuesta

17

El sitio que ha encontrado es una biblioteca no estándar de un tercero. No hay una biblioteca estándar de socket C++.

Sin embargo, si desea lo más cercano a una solución estándar (y potente), debe intentar Boost.Asio. Se ha propuesto su inclusión en la biblioteca estándar (TR2). Aquí está un ejemplo basado 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); 

Sin embargo, que ganaría mucho más si se usa Proactor del Asio para la operación asincrónica.

+1

+1 para referencia de Asio. :-) –

+1

@Chris, aprendí a amarla y valorarla después de trabajar 1 año escribiendo comercialmente un servidor C++, y luego a ver lo fácil que es con Asio :) –

4

El estándar C++ (al menos C++ 98) no se ocupa de las redes de ninguna manera. Entonces, tienes que hacer algo específico de la plataforma.

Algunas plataformas tienen implementaciones IOStreams que le permiten crear una secuencia a partir de un descriptor de archivo. En ese caso, use el descriptor de socket como su descriptor de archivo.

+2

+1: Nunca pensaría en pasar un 'fd 'a un iostream Oo –

+0

Estoy escribiendo mi aplicación en ubuntu. ¿Tiene IOStreams que me permite crear una transmisión desde un socket? ¿Cómo puedo buscar eso? – silverburgh

+0

@silverburgh: GCC 3.4 en adelante, así lo escuché, tiene '__gnu_cxx :: stdio_filebuf', que puede usar para eso. Vale la pena prestar atención a este artículo: http://www.synflood.at/blog/index.php?/archives/456-One-word-of-warning-about-stdio_filebuf.html –

Cuestiones relacionadas