CLASS - TCP CLIENT / SERVEUR

cs_MasterHack Messages postés 586 Date d'inscription jeudi 18 septembre 2003 Statut Membre Dernière intervention 13 février 2008 - 11 août 2005 à 17:22
xankow Messages postés 10 Date d'inscription mardi 17 juin 2008 Statut Membre Dernière intervention 8 juillet 2008 - 26 juin 2008 à 15:36
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/32989-class-tcp-client-serveur

xankow Messages postés 10 Date d'inscription mardi 17 juin 2008 Statut Membre Dernière intervention 8 juillet 2008
26 juin 2008 à 15:36
Salut,

je cherche a realiser un projet de type serveur client. Ce code est tres bien, mais pas encore adapter a mes besoins.
Mon serveur doit recevoir et lire tous les messages, mais aussi pouvoir ecrire a un client en particulier grace a son IP.
De plus je dois effectuer tout ca pour l'integrer a des .dll pour l'utiliser facilement dans plusieurs projets futur.

Je sais que ce code est vieux, mais je n'arrive pas a faire les modification necessaire tout seul. Alors de l'aide serai vraiment la bienvenu.

Merci.
Utilisateur anonyme
29 nov. 2007 à 16:36
Je sais que ce source est ici depuis plus de deux ans et n'a pas été commenté depuis, mais l'ayant parcouru et analysé pour faire moi-même un serveur TCP, je poste mes remarques qui peuvent toujours servir à quelqu'un qui voudrait utiliser ce source (qui reste de très bonne facture).

- je confirme évidemment la remarque de MR_LAPINOU concernant l'emplacement du Thread.Sleep

- la modification du 31 juillet 2005 17:30:07 n'est pas intégrée dans les sources téléchargeables

- le thread de lecture de données qui fait tourner la méthode ReceiveData pose problème lorsqu'une donnée de taille importante est envoyée sur par un client TCP (image, fichier, etc.) : tant qu'il reste des données à lire, le thread continue de lire sur la même socket client sans même essayer de lire les autres ; il y a risque de perte de données si le tampon d'entrée se remplit pendant ce temps pour les autres sockets...

- cette-même méthode ReceiveData ne possède pas de mécanisme pour rattrapper les exceptions (la méthode jumelle présente dans le client TCP le fait)

- les verrous de lecture et d'écriture auraient tout intérêt à ne pas être globaux au serveur mais spécifiques à chacun des clients : les déconnexions de certains clients risquent de ne pas pouvoir être vues (car pas testées) si l'activité du serveur est importante

- le ping/pong implémenté étant spécifique à ce client/serveur (le "vrai" ping/pong correspond à deux messages ICMP), il devrait pouvoir être désactivé pour que le serveur puisse être utilisé avec un client TCP dont on ne maitrise pas le code (tiers, externe, fermé, etc.). Par exemple, une valeur de 0 en timeout peut indiquer qu'on ne lance pas le thread qui effectue ces pings/pongs

- en tout état de cause, ce serveur TCP est une base qui peut servir dans des cas où la communication est légère : peu de données, peu de clients ; un pool de threads serait bien meilleur si de nombreux clients doivent se connecter, pour éviter trop de latence.
lumesh Messages postés 564 Date d'inscription jeudi 21 février 2002 Statut Membre Dernière intervention 7 novembre 2008
14 nov. 2005 à 17:40
Oui ce petit sleep est tres sensible. Il permet de faire mieux fonctionner la source sur un réseau lent !
mr_lapinou Messages postés 2 Date d'inscription mercredi 26 janvier 2005 Statut Membre Dernière intervention 12 novembre 2005
12 nov. 2005 à 21:14
Bonjour les gens,

Pour ceux que ca interessent, sur ce code il y a un petit bug qui surcharge le serveur.
Dans la classe Server, et la méthode ReceiveData le Thread.Sleep(10) est placé une } trop basse, remontez le et ca ira mieux pour votre processeur.

A+
mr_lapinou Messages postés 2 Date d'inscription mercredi 26 janvier 2005 Statut Membre Dernière intervention 12 novembre 2005
10 nov. 2005 à 11:02
Je viens de regarder ta lib qui est ma fois sympathique et pratique, mais j'ai un petit soucis dont je me suis appercu apres implementation, ta classe serveur bouffe toute la ressource CPU.
Connais tu ce problème ? As tu une solution ?
Sinon je vais regarder de mon coté ...
cs_MasterHack Messages postés 586 Date d'inscription jeudi 18 septembre 2003 Statut Membre Dernière intervention 13 février 2008 2
11 août 2005 à 17:22
merci pour la source,;)
faut avouer aussi que c la plus long page de codes-sources lol,bonne continuation.
Rejoignez-nous