CLASS - TCP CLIENT / SERVEUR

Signaler
Messages postés
586
Date d'inscription
jeudi 18 septembre 2003
Statut
Membre
Dernière intervention
13 février 2008
-
xankow
Messages postés
10
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
8 juillet 2008
-
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

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
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

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

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+