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

Soyez le premier à donner votre avis sur cette source.

Vue 4 551 fois - Téléchargée 295 fois

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

Ajouter un commentaire

Commentaires

uaip
Messages postés
1470
Date d'inscription
mardi 20 février 2007
Statut
Membre
Dernière intervention
7 février 2011
-
Salut,
"#pragma once" et "#include <StdAfx.h>" = Visual Studio (= Microsoft)
Donc pas totalement portable :)
cs_Nementon
Messages postés
21
Date d'inscription
dimanche 27 janvier 2008
Statut
Membre
Dernière intervention
25 mai 2010
-
Ouaip, uaip, vas s'avoir ce qu'il m'est passé par l'esprit l'autre soir ...
De toute manière, je me suis rendu compte que cette class soufrait d'un gros défaut, et pas que il y a quelques notions sur la gestion des sockets qui m'avait échapper, une grosse maj arrivera d'ici peut (Ark, si seulement j'avais le pouvoir de la suprimmer celle la) m'enfin, j'en ai pas le pouvoir, bref, en effet :D
kertimanoff
Messages postés
76
Date d'inscription
samedi 3 décembre 2005
Statut
Membre
Dernière intervention
30 juin 2013
-
ce type de source m'interraisse.
j'ai unikement survolé la tienne, j'attend ta fameuse MAJ. seul commentaire, utilise un using namespace std; parce que se trinballer un std:: ... enfin bon, chacun fait comme il veut
uaip
Messages postés
1470
Date d'inscription
mardi 20 février 2007
Statut
Membre
Dernière intervention
7 février 2011
-
Pas besoin d'utiliser "using namespace" dans ce cas.
http://www.commentcamarche.net/forum/affich-12675682-c-using-namespace-std

Un autre membre avait posté le lien d'une doc, il y a quelques temps, expliquant parfaitement pourquoi il était déconseillé d'utiliser "using namespace".
kertimanoff
Messages postés
76
Date d'inscription
samedi 3 décembre 2005
Statut
Membre
Dernière intervention
30 juin 2013
-
excellent. Merci pour le lien, je n'est jamais rencontré le cas ou le "using namespace" porté a confusion mais d'aprés l'explication, il est parfaitement clair que ça peu étre le cas.
trés interraissant a savoir pour éviter des prises de téte.
merci uaip

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.