A chaque connexion son port?? [Résolu]

Signaler
Messages postés
805
Date d'inscription
jeudi 22 mai 2003
Statut
Membre
Dernière intervention
30 octobre 2010
-
Messages postés
805
Date d'inscription
jeudi 22 mai 2003
Statut
Membre
Dernière intervention
30 octobre 2010
-
Salut
Je suis entrain de programmer un Client/Serveur, et je veux savoir SQ c mieux d'avoir chaque client connecté avec son propre port avec le serveur?? ou c comme si tt les clients se connectent dans le même port ( le cas de RazorBack2 de edonkey, +900 000 connectés)???

Merci
YaoYao !!
1 + 1 = 10

6 réponses

Messages postés
108
Date d'inscription
vendredi 11 juillet 2003
Statut
Membre
Dernière intervention
27 novembre 2007

Si tu crées un serveur asynchrone, tu vas utiliser BeginAccept() et lui fournir une Callback.

Dans cette Callback (un client vient donc d'arriver et le socket vient également d'être dupliqué) :

La première chose à faire est un nouvel BeginAccept() pour un éventuel client à venir.

Ensuite, il faut quand même s'occuper de celui qui vient de se
connecter alors on commence un BeginReceive() avec une nouvelle
Callback pour ce nouveau canal dédié.

Dans cette Callback, tu gères ton propre protocole d'échange avec les
données que tu viens de recevoir puis tu relances un nouveau
BeginReceive() pour les données à venir.



Sache qu'à partir d'une certaine taille le socket découpe son buffer et
tu peux recevoir plusieurs trames alors que tu n'en as envoyer qu'une
énorme...

L'idéal est de préfixer ton tableau de données par sa taille. Sachant
qu'un int permet la transmision d'environ 4095 Mo, tu peux donc
préfixer par 4 octets.

Tu utilises pour ce faire, la classe BitConverter.



Le destinataire possède un booléen pour savoir s'il est en attente d'en-tête (première trame) ou non.

Si c'est le cas, il retire les 4 premiers octets et conserve la valeur
associée (toujours avec BitConverter) et stocke le reste dans un
tableau alloué sur cette taille.

Tout ce qui vient après et ensuite ajouté dans ce tableau.

Quand tout le tableau est rempli, la classe qui gère ton socket peut
générer un événement de type "DataReceived" : la trame originale est
restituée.



Bon courage.

-- AOGie --
Messages postés
52
Date d'inscription
jeudi 28 octobre 2004
Statut
Membre
Dernière intervention
24 août 2005
1
Fildomen: quand ton client, se connecte, sa
socket est prete à etre utilisée, alors pourquoi lui demander d'en
recreer une nouvelle? Une socket est identifiée par son quadruplet
(ipsource,portsource, ipdestination,portdestination), que le port
destination ne change pas, ce n'est pas un probleme.

Miiitch
Messages postés
108
Date d'inscription
vendredi 11 juillet 2003
Statut
Membre
Dernière intervention
27 novembre 2007

Comme en C++, chaque client se connecte sur un seul socket (un seul numéro de port pour tous au moment de la tentative de connexion) qui est ensuite dupliqué. Chaque client se trouve ainsi avec un socket dédié sur le serveur, avec lequel les échanges se font.

-- AOGie --
Messages postés
52
Date d'inscription
jeudi 28 octobre 2004
Statut
Membre
Dernière intervention
24 août 2005
1
Ce mieux c'est quand meme tous les clients sur un même port, ca evite
d'"écouter" sur plusieurs port à la fois. Et tu auras exactement le
même résultat au final avec plus de simplicité: inutile de fournir a
chaque client son numéro de port sur le serveur, etc etc

Miiitch
Messages postés
805
Date d'inscription
jeudi 22 mai 2003
Statut
Membre
Dernière intervention
30 octobre 2010

aogie: tu veux dire que c'est exactement pareil??
Miiitch:j'écoute pas dans tt les ports, mais quand un client ce connecte au port principal, je lui réenvoie un port libre ou il peut trouver un listener qui l'attend,de ttes facons, c mieux de les recevoir d'un seul port

Merci
YaoYao !!
1 + 1 = 10
Messages postés
805
Date d'inscription
jeudi 22 mai 2003
Statut
Membre
Dernière intervention
30 octobre 2010

Mci tt les deux

YaoYao !!
1 + 1 = 10