Serveur UDP

RideIsLife Messages postés 7 Date d'inscription dimanche 25 mars 2007 Statut Membre Dernière intervention 1 juillet 2008 - 17 juin 2008 à 11:17
RideIsLife Messages postés 7 Date d'inscription dimanche 25 mars 2007 Statut Membre Dernière intervention 1 juillet 2008 - 18 juin 2008 à 10:14
Bonjour,
Je souhaite réaliser un serveur UDP à partir d'un serveur TCP de la librairie ICS. J'ai changé ce qui me semblait être approprié pour transformer ce serveur en UDP. Une connexion UDP est bien établie sur le port que je souhaite (visualisée avec "netstat -a"), le serveur reçoit bien les données que je lui envoi à partir du programme UdpSend présent aussi dans la librairie ICS. Le problème est que je n'arrive pas à récupérer l'adresse IP et le port d'envoie du client... En effet, j'obtiens une erreur lorsque j'essai d'utiliser les fonctions GetPeerPort de WSocket ce qui parrait logique puisque nous ne sommes pas en mode connecté. Quelqu'un connait il un moyen ? Dois je changer autre chose dans les définitions de la socket ?
D'avance merci.

6 réponses

Utilisateur anonyme
17 juin 2008 à 13:37
On peut pas connaitre à l'avance l'IP d'un client : il faut déjà qu'il soit connecté.
Pour envoyer son IP a un client : des sources existent à toi de chercher.
Sinon rien t'empeche de mettre l'IP d'un client connecté dans un fichier Ini et de l'utiliser ultérieurement : seule condition => Que l'IP du client soit fixe

Ps : Je me demande comment tu as pu faire de l'UDP avec un composant TCP .
0
RideIsLife Messages postés 7 Date d'inscription dimanche 25 mars 2007 Statut Membre Dernière intervention 1 juillet 2008
17 juin 2008 à 13:52
Pardonne moi, mais je ne comprends pas trop. Le protocole UDP étant par définition un mode déconnecté je ne vois pas comment le client devrait être connecté... Sachant que mon programme d'envoi UdpSend envoi à une adresse et un port particulier (vers le serveur en l'occurence...), je pensais qu'il fallait "simplement" lire le datagramme UDP reçu et en extraire le champ de l'adresse de l'expéditeur, et je pensais qu'une fonction tel que GetPeerName pouvait exister (en mode déconnecté). Pour répondre à ton interrogation, un composant TCP travaillant en mode connecté dans la librairie ICS, pour le transformer en UDP une seule ligne à changer à savoir le protocole, bien entendu les fonctions de mode connecté ne fonctionnent plus mais cela ouvre bien un port en UDP (ce qui était à l'origine suffisant pour moi il me semblait...).
Or je comprends bien qu'il faut que mon client est déjà envoyé un premier datagramme pour que je puisse connaitre son IP. Mais je ne vois pas comment acceder au datagramme en lui même, puisque les données reçues en tant que telles sont récupérées à l'aide d'un acces du style "donneesRecu:=WSocketServer1.ReceiveStr".
Merci pour ta réponse.
0
Utilisateur anonyme
17 juin 2008 à 17:26
Salut,

Pour répondre à ton interrogation, un composant TCP travaillant en mode
connecté dans la librairie ICS, pour le transformer en UDP une seule
ligne à changer à savoir le protocole, bien entendu les fonctions de
mode connecté ne fonctionnent plus mais cela ouvre bien un port en UDP
(ce qui était à l'origine suffisant pour moi il me semblait...).
 La distinction UDP/TCP est un peu plus complexe que ce que tu décris. Du reste tu peux tres bien faire de l'UDP et etre connecté. Je crois que tu n'as pas bien compris ce qu'est l'UDP : Allez hop direction la RFC
0
RideIsLife Messages postés 7 Date d'inscription dimanche 25 mars 2007 Statut Membre Dernière intervention 1 juillet 2008
18 juin 2008 à 08:43
Salut,
Tu as probablement raison sur le fait que je n'ai pas bien compris ce qu'était l'UDP, du moins ce qui était sur la RFC je pensais l'avoir compris... En TCP garder la connexion établie voulait dire pour moi qu'un "tunel" devait toujours lier le client et le serveur pour l'envoi des données, la gestion d'erreur de packet, etc... Je ne sais pas si je me trompe. Sachant que l'UDP n'a justement pas de gestion d'erreur je ne comprend pas comment alors, je dois établir la "connexion" entre le serveur et le client. Et au final récupérer l'adresse IP du client qui peut être inconnue au départ. Etant de plus débutant en Delphi (je ne connaissais pas l'existance de ce langage il y a une semaine, on me l'a imposé), je n'arrive pas à m'en sortir avec la librairie ICS, les WSocket les classes ont des héritages de partout...Bref.
Merci pour ton aide.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
18 juin 2008 à 10:06
Tout ce qui touche au réseau n'est pas simple si on rentre dans les détails et qu'on veut faire des choses complexes. Juste question : As tu vraiment besoin de faire de l'UDP ? Il est assez rare comparé au TCP.


Perso, je n'aime pas les composants ICS : je préfère encore les composants Indy qui sont aussi riche en fonctionalités et beaucoup moins exotiques  en terme d'utilisation.
0
RideIsLife Messages postés 7 Date d'inscription dimanche 25 mars 2007 Statut Membre Dernière intervention 1 juillet 2008
18 juin 2008 à 10:14
Oui, le protocole UDP m'est imposé. Quant aux composants Indy, la personne pour laquelle je travaille ne veut pas les utiliser car à priori moins portables, et moins utilisés dans le monde, personnellement je n'en sais rien... Donc 2 contraintes ICS + UDP... Sachant que le réseau n'est pas ma spécialité... Je vais peut être envoyer un mail à la mailing list sur les sockets de François Piette,  sachant que je doute d' obtenir une réponse.
0
Rejoignez-nous