begin process at 2010 02 10 07:23:31
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Réseaux & Internet

 > SERVEUR MULTITHREAD SOUS LINUX/WINDOWS[MYSQL][VC++/DEVC++/G++]

SERVEUR MULTITHREAD SOUS LINUX/WINDOWS[MYSQL][VC++/DEVC++/G++]


 Information sur la source

Note :
Aucune note
Catégorie :Réseaux & Internet Classé sous :serveur, multithread, unix, windows, mysql Niveau :Initié Date de création :23/10/2006 Date de mise à jour :23/10/2006 20:23:27 Vu / téléchargé :11 182 / 4 694

Auteur : max12

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note


 Description

Je sais que ce n'est pas le premier, mais je crois qu'il est un peu plus élaboré que ceux que j'ai pu voir.

C'est un simple serveur multithread pouvant être compilé pour fonctionner sous Linux/Windows. Il gère l'utilisation d'une base de donnée MySQL, tout est divisé en classe (mais parfois je me dis que je me suis planté dans certain endroit de l'architecture). Gestion du mode debug (avec fichier log).

Ce que peux faire le serveur :
- Transmettre des messages entre clients connectés
- Enregistrer des messages hors-ligne dans la base de donnée (et éventuellement les retransmettres aux connectés)
- Console admin (primitif)
- Gestion des status (comme MSN)
- La fonction de traitement des données est très facile à modifier ou a remplacer.

Le projet contient les projets en VC++7 ou DevC++, commande pour G++ (testé sur UBuntu), commandes MySQL.
g++ -pthread -lmysqlclient CBridge.cpp CConfiguration.cpp CConnexion.cpp CDatabase.cpp CDataQuery.cpp CLog.cpp pwserver.cpp -o PBServer


Prérequis :
Linux :
- Pack MySQL Server, avec Dev
- G++
Windows :
- Pack Developper de MySQL qui se trouve avec l'installation de MySQL (en cochant l'option lors de l'installation.
- Librairie PThread pour Win32 (inclu dans le ZIP)
- Recommandé :
  - Dev C++ ou VC++ 7 (mais avec 6 et 8 il ne devrait pas y avoir de problème)

La synchronisation fonctionne très bien, à venir jusqu'a maintenant en 2 semaines de test il n'a jamais planté (au bout de sa Win2000 avait son quota et le vieux Dell CPi ne digère pas trop les drivers de NuNux) mais le test s'est réalisé a 4 utilisateurs réguliés.

Le multithread n'est pas forcément l'idéal pour un simple messenger certe, mais j'avais envie de faire en sorte qu'il puisse transférer des fichiers plus tard (d'où la classe CBridge que je n'ai pas terminée ni même a peine commencé :P).

Source

  • //Dans le ZIP, vous ne m'aimeriez pas si je postais le main.cpp ici
  • //Il me semble avoir mis assez de commentaires
//Dans le ZIP, vous ne m'aimeriez pas si je postais le main.cpp ici
//Il me semble avoir mis assez de commentaires

 Conclusion

En espérant que vous le trouverez utile, je le poste car quelqu'un s'est montré intéressé.
Pour compiler sous Linux il faut mettre #define UNIX au début des fichiers.
Level 2 car multiplateforme, si vous n'êtes pas d'accord je corrigerai le tir.

PS : Ne pas pleurer en voyant les nombreuses fautes d'anglais
PS2 : J'ai testé sur DevC++ avant de poster, mais pas retesté sur VC++ 7 (car mes fichiers .h sont corrompus)

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

23 octobre 2006 20:23:27 :
Correction de quelques fautes et ajout de détails

 Sources du même auteur

Source avec Zip Source avec une capture JEU DE TETRIX [WIN32][VC++7][SANS MFC][FMOD]

 Sources de la même categorie

Source avec Zip TIM_RESEAU, CLASSES POUR RESEAU COMPLET par williamallas
Source avec Zip INTERNET IP FINDER TROUVER VOS ADRESSE IP (INTERNET) par xmustapha
Source avec Zip CLIENT/SERVEUR AVEC TSOCKETSERVER & TCLIENTSOCKET par xmustapha
Source avec Zip REMOTE SHELL GEN par ganjarasta
PROXY IRC SIMPLE (WINDOWS/WINSOCK) par _michel

 Sources en rapport avec celle ci

EXPLORATEUR DE FICHIERS WINDOWS EN C par wildhawk
Source avec Zip Source avec une capture CLASSE GRAPH: GESTION DES GRAPHIQUES DANS LES APPLICATIONS W... par Pistol_Pete
CANEVA DE SERVEUR MULTITHREAD UTILISANT CSOCKET par djmoa
Source avec Zip SERVEUR HTTP 1.1 SIMPLE V2.XX (WINDOWS & GNU/LINUX COMPATIBL... par xterminhate
Source avec Zip SERVEUR/CLIENT SOUS WINDOWS EN MODE CONSOLE (VC++,DEVCPP,BOR... par ADPro22

Commentaires et avis

Commentaire de NitRic le 25/10/2006 17:58:22

CBridge::CBridge(int NbClients)
{
  // On utilise « this », pas le nom de la classe ...
  // j'ai vu cette « chose » dans plusieurs de tes classes ...
  CBridge::NbClients = NbClients;
}
// modifié
CBridge::CBridge(int NbClients) : this->NbClients(NbClients)
{
  // nothing
}

pour faire vraiment C++ et non un mélange de C et de C++, pourquoi ne pas utiliser les *stream pour les fichiers?

dans ton fichier CConfiguration.h, c'est quoi ca?
    public:
        CConfiguration::CConfiguration();

pourquoi mettre les attributs de tes classes en public? autant y aller en C avec des structure, aucune différence ... dans ton cas, l'OO n'a pas lieux d'être, l'encapsulation/etc. => au poubelle dans ton cas ...

*** Exemple
class Object
{
  public:
    Object() : m_data(0)
    {
      // nothing
    }
    ~Object()
    {
      // nothing
    }

    int getData() const
    {
      return this->m_data;
    }
    void setData(const int data) // « const » est optionnel(c'est par copie de toute facon)
    {
      this->m_data = data;
    }

  private:
    int m_data;
};

tu devrais utiliser <> pour les headers « standards » et ceux du OS, tels que <windows.h>/<string.h>/etc. et garder les "" pour tes headers. au moins avec les <> on se pose pas trop de question :: c'est un header « standard/OS » ou un perso. !? :: réponse: std/OS, c'est automatique quand on le voit ...

en passant, en C++, c'est pas string.h/stdio.h/etc. mais plutôt cstring/cstdio/cstdlib/etc. => namespace

sous Windows, utilises plutôt <winsock2.h> et non celui de <windows.h> car celui de <windows.h> c'est la version 1(qui est préhistorique maintenant), alors préfères la version 2, pour être à jour ...

#include <winsock2.h> // inclut aussi <windows.h> et ce dernier devient donc optionnel
#include <windows.h> // optionnel si on utilise/inclut <winsock2.h>

tu peux aussi définir WIN32_LEAN_AND_MEAN avant l'inclusion de <windows.h> pour éviter l'inclusion de la version 1 de winsock mais avec <winsock2.h>, t'as rien à faire, sauf inclure ce fichier !

dans ceci: bool CDataQuery::GetAuthentification(char* User, char* Pass, CConnection* pClient)
plutôt que d'avoir 10,000 else, pourquoi ne pas utiliser une variable(bool)? tu retournes plus souvent false que true alors mets false par défaut(à l'initialisation) et changes pour true si besoin, comme ca, t'aura juste UN ->Free(...) au lieux de 20(même si le compilateur devrait pouvoir s'arranger pour mettre ca « correcte » derrière) ...
  bool retval = false;

  if ( cond1 )
  {
    if ( cond2 )
    {
      if ( cond3 )
      {
        retval = true;
      }
    }
    else {
      retval = true;
    }
    ->Free(...);  // juste UN Free()
  }
  return retval;

et tu pourrais utiliser cette méthode dans plusieurs de tes classes/méthodes/...

std::string ne t'interesse pas? très utile pourtant ...

en passant, en utilisant les *stream, dans ton CLog tu pourrais même surcharger l'opérateur << pour écrire dans ton fichier, CLog l;  l << "ceci";  // par exemple
y'a pleins de choses que tu pourrais faire mais que t'as pas fait :P

en C++, autant y aller en C++/OO plutôt que C++/C
le C++ est un C OO alors utilises l'OO sinon retournes en C :}

les librairies, ajoutes les dans ton makefile ou dans les options du projet mais laisses tomber le #pragma, pour connaître les librairies utilisés/liés/.. à ton projet, faut voir dans les fichiers sources/options/etc., un endroit c'est plus ... simple ... pour ce qui est de la configuration(comme pour les libs/...) on fait pas ca dans les fichiers .c/.cpp/.h/.hpp/etc. mais dans les makefiles/options du projet/etc., c'est global au projet et pas spécifique a un fichier(il y a quand même des exceptions parfois) ...

c'est ce que j'ai remarqué des fichiers que j'ai regardé :}

bref voilà, ce sont mes commentaires, dans l'ensemble ca l'air d'être un bon projet(je l'ai pas testé/essayé), bonne continuation :}

Commentaire de max12 le 26/10/2006 14:55:38 administrateur CS

Merci pour tes commentaires (très très constructif :D, fait longtemps je t'avais pas vu), je vais apporter les corrections quand j'aurai réinstallé VC7 et avancé dans mes travaux en retard. Concernant la classe CBridge elle ne sert à rien car pas terminée (ni commencée ;) ) (son but était de faire du tunnelling pour les transferts de fichiers ou jeux en réseaux). Concernant le type string il a le défaut d'être lent, j'ai donc décidé de faire à la main. Va falloir que je me documente sur les *stream aussi.

A+

Commentaire de jipef le 16/01/2007 16:00:03

j'ai plutot une question quelqu'a til une experience de windev sous RT LINUX ???

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

creer un client(windows) dialogant en nfs avec serveur unix [ par the wolf ] il me faut creer un client (ou configurer) windows pour pouvoir exploiter les repertoires mis sur le serveur unix deja configurer. client windows , serveur linux mysql [ par Guilhou ] Bonjour &#224; tous, j'aurais voulu savoir s'il &#233;tait possible de faire communiquer une serveur linux avec des clients qui tournent sous windows. un serveur unix configure des client windows avec les rpc [ par oussssa ] &nbsp;bonjour :mon probleme c'est de faire un serveur unix qui va executer des prg ecrite en c# qui controle&nbsp; et configures les @ ip, journal d'e serveur unix communique avec des clients windows en audio& video>>>>>> svp trés urgent [ par oussssa ] bonjour :s'il vous plait est ce que vous pouvez m'aider a faire un petit serveur unix qui peut controler et communiquer avec des clients &nbsp;windows Blocage complet des Socket et autre E/S ..? [ par pdc_666 ] Bonjour à tous,j'ai un gros soucis dans un programme que j'ai créé pour ma société. Pour faire simple c'est un Standard téléphonique à reconnaissance Client serveur, pc-microcontroleur [ par Nixeus ] Bonjour,Je doit faire communiquer un pc ( windows xp) avec un microcontroleur BECK de type SC12.Je doit donc créer un petit prog client-serveur ( le s Débutant : utulisation d'un serveur MySQL [ par kj_83 ] Salut ,Je doit réaliser un programme (avec C++ Builder) avec un serveur MySQL et une base de donnée .Problème , je ne me suis jamais servis d'un serve Question sur Thread dans mon serveur multithread [ par Nixeus ] Bonjour a tous !J'ai récupérer un code source d' un serveur multithread multi client, en mode console.J'ai repris les classes et j'ai porté ce program Connexion MYSQL C++ [ par cerede2000 ] Bonsoir apres une longue recherche dans les codes dans le forum, je me decide a poser ma qustion parceque la je patauge.Alors voila je code avec Dev-C multithread <=> Server (http/ftp/....) [ par wizard512 ] Bonsoir,je souhaiterais savoir si quelqu'un aurait des docs,ou des urls afin d'apprendre a créer un serveur supportantle multithreading.....Dura


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,764 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales