Voici un petit serveur chat en mode console, il utilise directement l'API Winsock ce qui lui procure une grande stabilité et une portabilité vers d'autres plateformes (Linux, Unix, MacOs, MacOsX, ...) ainsi que vers d'autre langages (C/C++, Kylix, VB, ...)
Source / Exemple :
// Dans le zip y'en a marre de coller la source, lol
// Mise a jour le 03/12/2002 :
// Correction du bug d'envoie de msg en cas de deconnection du client
// Amélioration du moteur d'envoi des mssage ainsi que des exceptions
// Test effectué sur 4 machines en rezo avec un tutal de 25 clients/machines
// Test de robustesse :
// MasterFlood (50 000 lignes) :
// - 2 client "flooder" en simultanné
// - 1 client de controle de non plantage
// Test reussi sans encombres... essayez pour voir...
// conseil pour ce test : placer vos procédures d'envoie et
// de reception dans 2 Threads distincts
// risque de buffer de reception plein
Conclusion :
Vous voila paré a faire un chat... et peut-être concurencer l'IRC ki sait?lol
Je n'ai pas fourni de client étant donné k'il n'y a pas de protocole non plus... ça c a vous de le faire...
D'ici peu cette source vas etre transformée en Composant avec un protocole complet, ainsi que des login(une fois ke j'aurais compris le fonctionnement des bases de données dans delphi), voila, en attendant ammusez vous bien avec cette petite source ;)
2 déc. 2002 à 09:43
Cependant devrais être mieux "sécurisé"...
En effet il est assez simple a planté et supporte mal un grand nombre de clients.
Il ne détecte pas les déconnexions erronées (perte de connexion ex: débranchement de modem, extinction d'un routeur .... ), donc il essaie d'envoyer des données sur des sockets qui ne sont plus utilisés, ce qui provoque un plantage..., ceci pourrais facilement être tester et corrigé.
Continue, il es très bien ....
Bon coding...
ManChesTer.
2 déc. 2002 à 12:26
if i<=0 then raise Exception.Create('fin de communication');
sert justement a créer une exeption et la fermeture des sockets non valides(ex: deconnections) j'ai testé cette ecentualité en reso local en débranchant l'ordi ou y'a le serveur du switch, le sever créé les exeptions et ferme les sockets alloués et attends de nouvelles connections.
pour ce qui est du nombre important de clients, je n'ai pas encore la solution. mais cela va surement venir.
de plus, en ce moment je travaille plus sur l'integration dans un environement graphique avec bdn pour identification, protocole evolué, ect...
2 déc. 2002 à 12:31
2 déc. 2002 à 13:48
if TClient(Clients[i]).Handle <> INVALID_SOCKET then TClient(Clients[i]).SendLine(s);
au lieu de :
TClient(Clients[i]).SendLine(s);
12 déc. 2002 à 17:43
continue, et bon coding...
ManChesTer.
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.