ianis24
Messages postés87Date d'inscriptiondimanche 20 août 2006StatutMembreDernière intervention13 janvier 2011
-
5 juin 2009 à 12:23
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 2015
-
22 août 2012 à 15:31
Bonjour,
mon problème est plutôt complexe d'un point de vu technique.
Je souhaite créer un Serveur (winsock) pouvant gérer plusieurs Clients.
Jusqu'ici aucun problème.
Maintenant mon Serveur Utilise le protocole TCP pour établir une connexion et le protocole UDP pour envoyer et recevoir les donnés d'échanges.
C'est la que je bloque, je ne peut pas utiliser
...................
dim i as long
i = 5
'nomdre de SockUDP
sockUDP(i).bind 1200
...................
avec plusieurs socks
Précision j'utilise le CsocketMaster.
Une partie du code est déjà réaliser ( mail 1 seul client peut ce connecter à la foi )
Si vous avez des idées ou des questions, ça m'intéresse.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 5 juin 2009 à 17:12
Salut
Curieuse idée d'avoir choisi TCP pour la connexion et UDP pour les échanges : j'aurais plutôt fait l'inverse.
Contrairement à TCP, UDP ne garantit pas que le message sera bien délivré à son destinatiare, ni 100% de sa qualité. Par contre, il a d'autres avantages.
En VB6, si tu travailles sur un réseau privé, tu peux utiliser <cette source> de recherche automatique de serveur, ce qui te simplifera la connexion initiale :
Le client lance une requète UDP sur le port convenu d'avance et, si un serveur voit passer cette requète, renvoie une preuve de vie au client.
Le client recevant cette info connait donc l'adresse IP du serveur.
Il n'a plus qu'à se connecter en TCP cette fois sur cette adresse IP et sur le port cenvenu (un autre que celui utilisé pour l'UDP)
La source se compose de deux contôles utilisateurs, client et serveur, que tu n'as qu'à poser sur tes formes + quelques paramètres.
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 5 juin 2009 à 17:17
Secondo, ton composant CsocketMaster
m'est inconnu.
Si tu as des problèmes avec, voit avec le créateur.
Normalement, en VB6, un objet peut toujours être indexé, il suffit d'utiliser la méthode adéquate :
Tu places ton objet CsocketMaster sur ta forme et tu lui donnes l'index 0
Quand tu as besoin d'un nouvel élément :
Load CsocketMaster(i)
Alors seulement tu pourras accéder à ses paramètres comme ton sockUDP(i).bind 1200
Il faudra bien sûr aussi penser à les détruire avant de refermer ton programme, avec un Unload
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 5 juin 2009 à 17:42
1. tes 5 sockets écoutent (écouteraient....) le même port? pas possible
2. si ton serveur est en TCP, c'est ce serveur qui va accepter sur le port udp, il va transmettre le requestid
tes sockets UDP n'ont jamais à être en écoute
ianis24
Messages postés87Date d'inscriptiondimanche 20 août 2006StatutMembreDernière intervention13 janvier 2011 6 juin 2009 à 02:18
1. tes 5 sockets écoutent (écouteraient....) le même port? pas possible > justement c'est mon problème
Si j'ai bien compris le protocole UDP ne permet pas de garder unne connection ouverte très longtemp avec le csocketmaster, il faut redefinir le remotehost + port a chaque foi.
Je vasi voire ce que je peut faire du requestID, merci.
Ianis
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 7 juin 2009 à 16:21
Il n'y a pas de connexion entre client et serveur en UDP.
Le client envoie une requète sur le réseau. Si le serveur écoute (bind), il la recevra, mais rien de sûr.
Le protocole TCP, lui, s'assurera que la demande est bien arrivée et qu'elle a été acceptée par le serveur.
Inspire toi de la horde de sources qui parlent de "Chat" ou de "client" / "serveur" présentes sur le site.
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 9 juin 2009 à 00:45
Le surnom du mode UDP, c'est "mode déconnecté".
Si tu mets un Wonscok en UDP et que tu lances un Bind, ça y est, tu es en mode "écoute" pour l'UDP.
Mais l'évènement de l'arrivée du message n'est pas remonté jusqu'au client, il n'y a pas de contrôle de flux.
Quand le socket reçoit une info, DataArrival se déclenche et tu as l'IP de l'émetteur dans le RemoteHost.
Si tu veux lui répondre, tu utilises un second socket et tu envoies ton message.
Renseigne-toi sur les sockets, par exemple avec <cette page> TRES instructive.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 9 juin 2009 à 00:51
De plus, ce que tu dis est faux : En faisant la simple recherche de "serveur udp" parmi les codes du site en excluant .NET, il y a des exemples.
Ce qu'il faut que tu te mettes dans la tête, c'est que l'UDP est du multi-clients puisqu'aussitôt le message arrivé, la connexion se referme, le socket est donc toujours disponible, peut importe d'où vient le message, tu lme découvres en le recevant.
Fais des essais simples, puis complique-le - pas l'inverse.
ianis24
Messages postés87Date d'inscriptiondimanche 20 août 2006StatutMembreDernière intervention13 janvier 2011 9 juin 2009 à 19:24
je comprend parfaitment comment utilise les winsocks avec le protocole UDP,
C'est plus un problème de gestion.
Mon programme est très complexe d'un point de vue des connexions TCP et UDP car il doit aussi bien pouvoir gérer 1 que 10 000 clients en memes temp.
J'ai établi un petit code simple mai qui n'est pas fiable.
A chaque connexion d'un client en TCP, le Serveur bind et lui répond le port UDP au quel il devra ce connecter.
Malheureusement après plusieurs tests je me suis rendu compte que plusieurs chose n'allait pas correctement.
De plus, au bout de 60 000 connexions et deconnections, la plage des ports est épuisé certains clients sont encor en ligne d'autre sont deconnectés etc...
Chaque clients ne peuvent disposés que de l'IP du Serveur.
A cause de ma multitude d'echec avec le protocole UDP je le met de et mon application fonctionne qu'avec le TCP.
Mais je suis toujours interesser par ce protocole.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 22 août 2012 à 15:31
"serveur ftp qui utulise le protocole UDP"
A ma connaissance, ça n'existe pas parce que la transmission des paquets UDP n'est pas garantie; ils sont expédiés, mais aucun contrôle de la délivrance du paquet.
Difficile dans ce cas de s'assurer que le morceau de fichier transmis ainsi ne soit vérolé.
PS : Pourquoi avoir posé une question à la suite de cet échange qui date de plusieurs années ?
Mieux vaudrait poser une nouvelle question.
Rappel : TOUT ce qu'on peut donner est déjà en ligne. C'est à toi de faire les recherches.
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)