Class de gestion de sockets en c++ (win)

Description

//!\\

Et bien, et bien, je suis allé un peut vite en besogne, et quelques peut buggé, une maj arrivera d'ici peut.

//!\\
/*
Aaaah, les sockets ... c'est fameux sockets si peut ragoutants au premiers abords. Beaucoup trop redondants selon moi, et malheureusement la stl du c++ n'intègre aucune gestion de ses sockets.
Alors quoi de mieux pour ma première source cpp, qu'un classe visant à simplifier leurs utilisation ?
J'ai fait en sorte de la rendre la plus portable et polyvalentes possible, même si je ne suis pas un grand habitué des sockets, j'espère bien ne pas m'être trompé dans le chemin que j'ai choisis pour son développement.
A l'heure actuel, le protocol UDP n'est pas supporté, (les fonctions sendto() et recvto()), j'attend vos avis avant de pouvoir poursuivre ma tâche.
Ci dessous un petit exemple rapide de l'utilisation de la class.

Bien à vous,
N'hésitez pas à commenter.
  • /

Source / Exemple :


/*
	Class Nementon_sock,
		- Projet originel dévellopé par Nementon 27/04/2010
			- Nementon@badwolf.fr

	Sous license Creative Common : Paternité 2.0 France,
		- to Share — to copy, distribute and transmit the work
		- to Remix — to adapt the work
	D'apres les conditions suivantes :
		- Vous devez citer le nom de l'auteur original de la manière indiquée par l'auteur de l'oeuvre ou le titulaire des droits qui vous confère cette autorisation (mais pas d'une manière qui suggérerait qu'ils vous soutiennent ou approuvent votre utilisation de l'oeuvre).
		
		Qui vous est accordées, à partire du moment ou vous laissez ce texte join dans le code source.

	Bien à vous,
	Nementon.
	#{http://uwht.u7n.org}
	#{http://badwolf.fr}

  • /
// Test_Sock.cpp : définit le point d'entrée pour l'application console. // #include "stdafx.h" #include "Nementon_sock.h" void sError(std::string & s) { MessageBoxA(NULL, s.c_str(), "Socket Error", MB_OK); } using namespace Nementon; void sereliazeSocket_data(std::string *pRetourDeDonnees, char* bufferSocket) {
  • pRetourDeDonnees += toString(bufferSocket);
} int _tmain(int argc, _TCHAR* argv[]) { Nementon_sock* psock = new Nementon_sock(); std::string host = toString("google.fr"); char myData[] = "GET /index.php HTTP/1.1\r\nHost: google.fr\r\nUser-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; fr; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 (.NET CLR 3.5.30729)\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n\r\n"; char buffer[8024] = ""; // Buffer pour la socket std::string receptionSocket; // Varible qui contiendra les données recuent par la socket /* try { //!\\ Gestion des erreurs psock->nSocket(); // Creation de la socket [Utilisation des parametres par defaults] if (psock->nConnect(host, 80)){ // Configuration de la socket psock->nSend(myData); // Envois de la requête psock->nRecvs(&receptionSocket, buffer, sereliazeSocket_data); // Reception des données // Ou avec une declaration explicite du template : psock->nRevcs<std::string *, char *, void (__cdecl *)(std::string *,char *)>(&receptionSocket, buffer, sereliazeSocket_data); std::cout << receptionSocket << std::endl; // On affiche psock->nClose(); // Hop ;) } }catch(const std::exception& e) { sError( toString(e.what())); //!\\ Gestion des erreurs } delete psock; //* // // Exemple 2, serveur tout bête : // /* // Nementon_sock* psock = new Nementon_sock();
  • / try {
psock->nSocket(AF_INET, SOCK_STREAM); psock->nBind(666); Nementon_sock* pcsock = new Nementon_sock(); //for(;;) { // \[O]/ psock->nAccept(pcsock); // Attente d'un client pcsock->nSend("Bienvenue chez moi l'ami(e) !"); // Envoie de données pcsock->nClose(); psock->nClose(); //} delete psock; delete pcsock; } catch (const std::exception& e) { sError( toString(e.what())); } //*/ system("pause"); return 0; }

Conclusion :


<<
psock->nAccept(Nementon);
Nementon->nSend("Qu'en dites vous ?");
>>

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.