Classe client type normal ou crypte (ssl) windows/linux

Soyez le premier à donner votre avis sur cette source.

Vue 12 531 fois - Téléchargée 1 109 fois

Description

Une classe "client" qui sert à se connecter à un serveur qui utilise une connexion soit normale soit cryptée. C'est au choix. Cette classe va de paire avec une autre classe récemment publiée sur le site : la classe serveur (vous avez vu, bien trouvé le nom !) disponible ici http://www.cppfrance.com/code.aspx?id=31155
Les foctions de cette classe sont documentées dans le code.

Source / Exemple :


/***************************************************************************
                          server  -  description
                             -------------------
    begin                : jeu oct 28 2004
    copyright            : (C) 2004 by neoTHGLF
    email                : neoTHGLF.neoTHGLF@laposte.net

                                                                                                                                                      • /
/***************************************************************************
  • *
  • This program is free software; you can redistribute it and/or modify *
  • it under the terms of the GNU General Public License as published by *
  • the Free Software Foundation; either version 2 of the License, or *
  • (at your option) any later version. *
  • *
                                                                                                                                                      • /
#ifndef CLIENT_H #define CLIENT_H #include <iostream> #include <string> #include <openssl/ssl.h> #ifdef WIN32 #include <winsock2.h> typedef int socklen_t; #pragma comment(lib,"ws2_32.lib") #pragma comment(lib,"ssleay32.lib") #pragma comment(lib,"libeay32.lib") #else #include <sys/types.h> #include <sys/socket.h> #include <netdb.h> #include <netinet/in.h> #endif using std::cout; using std::cin; using std::endl; using std::flush; using std::string; /** @author neoTHGLF
  • /
class client{ public: int client_set(short client_sin_family,char *adresse,int port,bool ssl_server); //Make the skeleton of the client int client_connect(); int client_write(char *msg); int client_read(char *msg); int client_get_fd(); SSL *client_get_SSL_fd(); char *convert(string str); private: #ifdef WIN32 SOCKET fd; #else int fd; #endif SSL *SSL_fd; /* SSL socket */ struct sockaddr_in server_addr; int client_len; int SSL_error_code; /* SSL functions returns*/ bool server_ssl_state; }; #endif

Conclusion :


Si jamais il subsiste des bugs, que vous trouvez que j'ai mal documenté ou que j'ai fait des erreurs de documentation, faites m'en part, je corrigerais. Je suis ouvert à toute suggestion.
Cordialement.

ps : le code entier est ds le zip. Le code présenté à l'écran est le code contenu dans l'header : client.h.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
39
Date d'inscription
mercredi 6 octobre 2004
Statut
Membre
Dernière intervention
27 mai 2009

ben justement, c'etait un programme de test, et a part les include et la déclaration du main, il n'y a rien d'autre...
En revanche, si le programme me dit que je ne recois rien, lorsque j'espionne avec ethereal, je vois bien la page de retour qui arrive dans l'ordi ...

la pauvre, elle doit etre fatiguée apres tout ce chemin a grande vitesse sur le net et elle c'est perdue en arrivant dans mon pc ... paix a son ame ...

J'essayerai sur un autre ordi, merci
pour les interesés, j'ai finalement fait mon prog en java, c'est tressssss simple. pensez y.
Messages postés
65
Date d'inscription
dimanche 7 septembre 2003
Statut
Membre
Dernière intervention
17 décembre 2007

Salut DjMoa,
Désolé pour le retard.

pour ma part le code que tu as tapé fonctionne très bien. Peut être le probleme se situe t'il autre part dans ton programme ?

Cordialement,
Messages postés
65
Date d'inscription
dimanche 7 septembre 2003
Statut
Membre
Dernière intervention
17 décembre 2007

Salut NEWZEH, essaye :
g++ -Wall -c app.cpp -lssl
g++ -Wall -c client.cpp -lssl

Cordialement.
Messages postés
1
Date d'inscription
vendredi 22 avril 2005
Statut
Membre
Dernière intervention
16 avril 2007

Salut
J'ai telecharger ce code source client.cpp
j'ai simplement ecrit ce code source app.cpp:
#include "client.h"
#include
#include <sys/types.h>
#include <sys/socket.h>
using namespace std;
int main()
{
client *obj;
obj = new client();
obj->client_set(1,"192.168.1.1",443,1);
return 0;
}
//end
J'ai tapé au shell de linux la commande suivante:
g++ -Wall -c app.cpp
g++ -Wall -c client.cpp
c bon jusqu'ici
ensuite lorsque je tape cette commande: g++ app.o client.o -o app

j'ai ce message d'erreur:
/tmp/ccWh5xOV.o: In function `client::client_read(char*)':
client.cpp:(.text+0x11c): référence indéfinie vers « SSL_read »
/tmp/ccWh5xOV.o: In function `client::client_write(char*)':
client.cpp:(.text+0x208): référence indéfinie vers « SSL_write »
/tmp/ccWh5xOV.o: In function `client::client_connect()':
client.cpp:(.text+0x2e4): référence indéfinie vers « SSL_load_error_strings »
client.cpp:(.text+0x2e9): référence indéfinie vers « SSL_library_init »
client.cpp:(.text+0x2ee): référence indéfinie vers « SSLv23_client_method »
client.cpp:(.text+0x2fc): référence indéfinie vers « SSL_CTX_new »
client.cpp:(.text+0x30a): référence indéfinie vers « SSL_new »
client.cpp:(.text+0x357): référence indéfinie vers « SSL_set_fd »
client.cpp:(.text+0x3ac): référence indéfinie vers « SSL_connect »
collect2: ld returned 1 exit status

Merci d'avance de votre aide
Messages postés
39
Date d'inscription
mercredi 6 octobre 2004
Statut
Membre
Dernière intervention
27 mai 2009

Salut a tous.
Cette classe me semble tout a fait bien, et surtout tres utile, bravo!
Mais néanmoins, j'ai un petit problème pour la faire fonctionner...
Je n'ai rien en lecture (0 octets lus)!!! voici mon petit code de test en mode non sécurisé (sachan que ca marche pas mieu en sécurisé...
char buf[1024]
client c;
c.client_set(AF_INET,"64.233.183.103",80,false);
if(c.client_connect()==2){
int ln;
cout<<_T("connecté")<<endl;
ln=c.client_write("GET / HTTP/1.1\r\n\r\n");
cout<<"envoyé: "<<ln<<endl;
ln=c.client_read(buf);
cout<<"lu: "<<ln<<endl;
cout<<buf<<endl;

sachant bien sur que la requete est correcte (fonctionne tres bien avec le meme code en MFC).
Merci de votre aide !
Afficher les 14 commentaires

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.