2010-02-05 16 views

risposta

17

Il sito che hai trovato è una libreria non standard di terze parti. Non esiste una libreria di socket C++ standard.

Tuttavia, se si desidera il più vicino a una soluzione standard (e potente!), Si consiglia di provare Boost.Asio. È stato proposto per l'inclusione nella libreria standard (TR2). Ecco un esempio basato 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); 

Tuttavia, ci si guadagna molto di più se si utilizza Proactor del Asio per l'operazione asincrona.

+1

+1 per riferimento Asio. :-) –

+1

@Chris, ho imparato ad apprezzarlo e ad apprezzarlo dopo aver lavorato 1 anno scrivendo commercialmente su un server C++, e poi ho visto quanto è facile con Asio :) –

4

Standard C++ (almeno C++ 98) non si occupa del networking in alcun modo. Quindi, devi fare qualcosa di specifico per la piattaforma.

Alcune piattaforme hanno implementazioni IOStreams che consentono di creare uno stream da un descrittore di file. In tal caso, utilizzare il descrittore di socket come descrittore di file.

+2

+1: non avrei mai pensato di passare una 'fd 'a un iostream Oo –

+0

Sto scrivendo la mia applicazione su ubuntu. Dispone di IOStreams che mi consente di creare un flusso da un socket? Come posso cercarlo? – silverburgh

+0

@silverburgh: GCC 3.4 in poi, ho sentito, ha '__gnu_cxx :: stdio_filebuf', che puoi usare per quello. Questo articolo vale la pena prestare attenzione a: http://www.synflood.at/blog/index.php?/archives/456-One-word-of-warning-about-stdio_filebuf.html –

Problemi correlati