IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Web & réseau Delphi Discussion :

[Win32][Indy 10] Faire un broadcast avec réponse


Sujet :

Web & réseau Delphi

  1. #1
    Membre expert

    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2004
    Messages
    2 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 123
    Points : 3 256
    Points
    3 256
    Par défaut [Win32][Indy 10] Faire un broadcast avec réponse
    Bonjour,

    Tentant de réaliser un composant pour applications client/serveur, je souhaiterais faire un broadcast afin de repérer et d'identifier chaque machine du réseau (dont surtout les serveurs)

    Un petit exemple vaut mieux que de longs discours...

    Sur un réseau local :
    Soient 2 serveurs : S1 et S2
    Soient n clients : C1 .... Cn

    Je souhaiterais qu'une des machines clientes (C1 par ex) puissent envoyer un broadcast afin de recevoir une réponse de S1 et S2 (et par la suite échanger des données).

    J'ai donc tenter de réaliser cela avec des TIdTCPClient mais l'adresse de broadcast est refusée ("Socket error # 10049 Cannot assign requested address").
    Cela fonctionne avec des TidUDPClient cependant, il y a risque de collision de donnée (et donc risque de perdre la réponse d'un des deux serveurs).

    La seule possibilité trouvé est d'utiliser un broadcast UDP puis réponse par TCP, mais là on est proche de l'usine à gaz

    Quelqu'un aurait-il une idée pour réaliser ce genre de chose ? Ou de la documentation ?

    Merci.

  2. #2
    Membre averti Avatar de Soulama
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 619
    Points : 416
    Points
    416
    Par défaut
    Salut,
    Pourquoi?
    un broadcast UDP puis réponse par TCP
    UDP puis reponce UDP c va faire lafaire

  3. #3
    Membre expert

    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2004
    Messages
    2 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 123
    Points : 3 256
    Points
    3 256
    Par défaut
    Cela fonctionne avec des TidUDPClient cependant, il y a risque de collision de donnée (et donc risque de perdre la réponse d'un des deux serveurs).
    Si les deux serveurs répondent en même temps, un des messages disparaitra du à la collision de paquet (il n'y a pas de mise en attente des paquets pour UDP je crois ... en tout cas cela ne fonctionne pas toujours).

  4. #4
    Membre chevronné
    Avatar de Pierre Castelain
    Inscrit en
    Avril 2002
    Messages
    523
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 523
    Points : 1 943
    Points
    1 943
    Par défaut
    Tu dois pouvoir faire ça facilement avec des mailslots : http://castelain.developpez.com/articles/Mailslots/

  5. #5
    Membre expert

    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2004
    Messages
    2 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 123
    Points : 3 256
    Points
    3 256
    Par défaut
    Je ne connaissais pas cette méthode (beaucoup plus simple d'ailleurs).
    Ca a l'air de convenir tout a fait à ce dont j'ai besoin.

    Je vais étudier cela.
    Merci beaucoup.

  6. #6
    Membre expert

    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2004
    Messages
    2 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 123
    Points : 3 256
    Points
    3 256
    Par défaut
    Voila ce que j'ai fait l'instant.

    J'envoie à intervalle régulier depuis les serveurs (qui est donc le client au niveau Mailslots) des messages en broadcast afin que les clients (serveurs Mailslots) puissent localiser leur(s) serveur(s).
    Cela fonctionne très bien cependant je dois utiliser après une connexion TCP pour des échanges de données (avec CRC et confirmation de receptions).

    C'est pourquoi je préfèrerais utiliser un broadcast TCP (qui me permet par la meme occasion un transfert de donner bi-directionnel et une certaine sécurité). Enfin si cela est possible.

    Donc je laisse le sujet ouvert au cas ou ...

    Merci.

    PS: Pierre : ton tuto est très bien fait , les mailslots sont vraiment très intéressants notamment dans la communication inter processus. Merci

  7. #7
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    685
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 685
    Points : 1 608
    Points
    1 608
    Par défaut
    A ma connaissance, le broadcast TCP n'est pas possible. Seul UDP peut fair cela, et je n'avoue avoir aucune expérience avec les composants Indy UDP. La seule fois ou j'ai voulu faire mumuse j'ai vite abandonné : j'avais trop l'habitude de leurs homologues TCP et pas franchement besoin d'utiliser ce protocole.

    Si ton problème est que les clients doivent converser avec un serveur dont ils ne connaissent l'adresse, le broadcast UDP est la seule solution. Après, pour la "réponse", c'est obligé que ce soit aussi en UDP, car je ne vois pas comment le serveur pourrait initier une communication avec le client (ou alors il devient client !).

    Reste une possibilité de gérer un poste à IP fixe tiers servant de "serveur de noms". L'IP est connue de tous les client, et cette entité renvoie l'IP des deux serveurs... qui peuvent du coup changer sans les rendre inaccessible.

    NB: J'ai déjà rencontré une variante de cette problématique (les IP des clients devant être connus des serveurs) et la seule solution sûre et fiable que j'ai trouvé a été de mettre le poste serveur en IP fixe. Régulièrement, les clients "s'annoncent" en envoyant une trame particulière, et là le serveur récupère leur IP. Au bout d'un certain temps de non réception de données, le client est considéré comme déconnecté et peut être enlevé des tables maintenues par le serveur.

  8. #8
    Membre expert

    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2004
    Messages
    2 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 123
    Points : 3 256
    Points
    3 256
    Par défaut
    Merci
    J'y vois plus clair

    Il faut que je réfléchisse à tout cela.
    Mais je pense que le mieux serait convaincre les clients de passer en IP fixe

    [Edit]Je pense que la meilleur solution consiste à utiliser les mailslots pour repérer les serveurs.
    Je ferais les connexions par TCP une fois les machines repérées.
    [/Edit]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/02/2008, 09h29
  2. Problème unit CRT pour Faire du Pascal avec Delphi
    Par alexmorel dans le forum Débuter
    Réponses: 4
    Dernier message: 01/06/2004, 17h13
  3. [INDY] comment faire un 'POST' avec idHTTP??
    Par gamez dans le forum Composants VCL
    Réponses: 5
    Dernier message: 17/05/2004, 19h02
  4. Faire une JFrame avec LookAndFeel
    Par aburner dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 03/12/2003, 08h54
  5. faire des graphiques avec Perl
    Par And_the_problem_is dans le forum Modules
    Réponses: 2
    Dernier message: 16/07/2003, 16h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo