2010-11-10 10 views
0

Existe-t-il une interface socket simple en C++ que je pourrais utiliser avec MS Visual Studio Express Edition? Je sais qu'il y a la bibliothèque WinSock, je suppose que je cherche un emballage qui est plus simple à utiliser.Je suis à la recherche d'une interface socket simple pour C++ en utilisant MS Visual C++ Express

Je considère la bibliothèque java.net assez simple, cependant, MS VC++ Express est ce que je dois utiliser. Y at-il quelque chose d'équivalent?

+0

La plupart des programmeurs qui utilisaient le code socket simple sont morts. –

+0

bsd/win le code de la prise est en réalité mort simple. la complexité réside dans le fait de traiter de la nature des flux, et chaque «simple» enveloppe que nous venons de voir expose à nouveau les mêmes problèmes. –

+0

Quel genre d'application est-ce? Un outil de ligne de commande qui utilise le réseau (comme wget ou ftp)? Une application graphique qui utilise le réseau (comme un navigateur Web)? Un service d'arrière-plan qui utilise le réseau (comme Windows Update)? Un serveur réseau en arrière-plan (comme un serveur web ou un serveur ftp)? Les wrappers qui fonctionnent bien dans un environnement sont horribles pour d'autres applications. –

Répondre

3

Je travaillais beaucoup au niveau de la socket et si c'est ce dont vous avez besoin alors oui Boost :: Asio est génial, même si c'est un peu déroutant.

Cependant, si vous avez juste besoin de fournir des données entre processus (sur des machines identiques ou différentes), alors j'irais un peu plus haut dans la pile et regarderais quelque chose comme ØMQ; Jetez un coup d'oeil comment il est facile de recevoir un "message" d'un autre processus:

zmq::context_t ctx(1); 

zmq::socket_t sock(ctx, ZMQ_REQ); 
sock.connect("tcp://localhost:5555"); 

zmq::message_t msg; 
while(sock.recv(&msg)) { 
    std::string s(static_cast<char*>(msg.data()), msg.size()); 
    std::cout << s; 
} 

L'envoi est tout aussi simple.

zmq::context_t ctx(1); 

zmq::socket_t sock(ctx, ZMQ_REP); 
sock.bind("tcp://*:5555"); 

std::string s = "Hello you!"; 
zmq::message_t msg(s.size()); 
memcpy(msg.data(), s.data(), s.size()); 

while(true) { 
    sock.send(msg); 
    sleep(1); 
} 

ZeroMQ est très léger et prend en charge la connexion, rebranchement, transmission, cadrage, etc ... Tout ce que vous devez avoir est votre charge utile « message » que vous voulez afficher sur l'autre côté de la pipe (dans ce cas, nous avons juste utilisé des chaînes simples).

Il prend également en charge un certain nombre de techniques de messagerie plus avancées telles que pub-sub (récepteurs multiples des mêmes messages).

+0

http://api.zeromq.org/zmq_cpp.html correspond aux liaisons C++; à partir de la page d'accueil, il y a un peu de 'pourquoi a-t-il recommandé une bibliothèque Python pour C++?' –

+0

Oui, désolé. Une bonne chose à propos de ZeroMQ est qu'il a des liaisons pour un très large éventail de langues, donc l'interopérabilité est très simple. http://www.zeromq.org/bindings:_start – joshperry

+0

Cependant, il est implémenté de manière native en C++ donc la "liaison" C++ est juste l'interface native de la bibliothèque. – joshperry