//!\\
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();
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 ?");
>>