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 :

Rechercher un PC particulier parmi une liste d'IP sur un réseau local


Sujet :

Web & réseau Delphi

  1. #21
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut
    elle sert à attacher le serveur sur une interface particulière (une ip en particulier). par défaut, le serveur s'attache à toutes (ip 0.0.0.0) ce qui ne devrait normalement pas poser de problème, mais vu qu'il y en a...
    essaie dans un premier temps de définir le binding à la seule adresse VPN pour voir (dans ce cas j'ai bien peur que tu ne recoive plus rien du tout, ce qui signifierais que le broadcast est bloqué par le VPN, ou que le client n'arrive pas à l'envoyer par le VPN).

  2. #22
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Citation Envoyé par evarisnea Voir le message
    elle sert à attacher le serveur sur une interface particulière (une ip en particulier). par défaut, le serveur s'attache à toutes (ip 0.0.0.0) ce qui ne devrait normalement pas poser de problème, mais vu qu'il y en a...
    essaie dans un premier temps de définir le binding à la seule adresse VPN pour voir (dans ce cas j'ai bien peur que tu ne recoive plus rien du tout, ce qui signifierais que le broadcast est bloqué par le VPN, ou que le client n'arrive pas à l'envoyer par le VPN).
    A ouais, ca pourrait etre pas mal
    Pendant que t'étais en train d'écrire, j'étais en train de tester ... Je finis et je te dis !

    Edit :

    Bon j'ai testé, j'ai mis 0.0.0.0, l'IP VPN, et l'IP réseau local, et aucun ne marche ... Donc la, je suis a court d'idées. Il faudrait pouvoir faire la meme manip pour le Client a mon avis !

    Enfin bref, merci bcp !

  3. #23
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut
    entre temps j'ai fais quelques (petites) recherches, et il apparait que le VPN bloque le broadcast (pas de veine), il va donc falloir trouver une autre solution.
    cela dit, la nuit porte conseil ...

    allez dodo pour moi!

  4. #24
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Citation Envoyé par evarisnea Voir le message
    entre temps j'ai fais quelques (petites) recherches, et il apparait que le VPN bloque le broadcast (pas de veine), il va donc falloir trouver une autre solution.
    cela dit, la nuit porte conseil ...

    allez dodo pour moi!
    Argh ! Tant pis, faut que je trouve une autre solution !
    Merci !
    Dodo moi aussi !

  5. #25
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Je pensais, avec le client, envoyer plein de messages a plein d'IP, puis voir si une répond ... C'est possible ? Comment faire pour voir si on recoit une réponse ? il faut régler le parametre Binding du IdUDPClient ?

    Merci, je continue de tester

  6. #26
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut
    si tu veux envoyer plein de messages à plein d'IP, tu procèdes de la même manière, sauf que tu n'utilises pas la méthode broadcast.

    - pour chaque IP
    - envoyer le message
    - attendre la réponse pendant un certain temps
    - si pas de réponse passer à l'IP suivante
    - si réponse, enregistrer l'IP courante comme étant celle du serveur
    - fin

    mais à mon avis, ce n'est pas une bonne solution, attendons l'avis des autres forumeurs.


    [EDIT] et puis j'y pense, pourquoi ne pas tout simplement prévoir une zone pour la configuration de l'adresse IP ou du nom du serveur ???

  7. #27
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Citation Envoyé par evarisnea Voir le message
    si tu veux envoyer plein de messages à plein d'IP, tu procèdes de la même manière, sauf que tu n'utilises pas la méthode broadcast.

    - pour chaque IP
    - envoyer le message
    - attendre la réponse pendant un certain temps
    - si pas de réponse passer à l'IP suivante
    - si réponse, enregistrer l'IP courante comme étant celle du serveur
    - fin
    Ouais, mais ca va etre long ... Est ce que je pourrais pas envoyer plein de messages, et attendre une réponse "collective" ? Parce que si je dois attendre un certain temps a chaque fois, ca risque de prendre du temps ...



    [EDIT] et puis j'y pense, pourquoi ne pas tout simplement prévoir une zone pour la configuration de l'adresse IP ou du nom du serveur ???
    Tu veux dire, sur le chat, prévoir une zone ou l'utilisateur va entrer l'IP serveur ? C'est déja le cas actuellement, et c'est justement ca que je veux eviter

  8. #28
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut
    Citation Envoyé par mick605 Voir le message
    Ouais, mais ca va etre long ... Est ce que je pourrais pas envoyer plein de messages, et attendre une réponse "collective" ? Parce que si je dois attendre un certain temps a chaque fois, ca risque de prendre du temps ...
    ok, dans ce cas crée plusieurs Threads. comment ? d'autres sauront y répondre mieux que moi

    Citation Envoyé par mick605 Voir le message
    Tu veux dire, sur le chat, prévoir une zone ou l'utilisateur va entrer l'IP serveur ? C'est déja le cas actuellement, et c'est justement ca que je veux eviter
    ok

  9. #29
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    ok, dans ce cas crée plusieurs Threads. comment ? d'autres sauront y répondre mieux que moi
    Justement, n'est il pas possible d'envoyer plusieurs messages dans la meme procedure, les uns a la suite des autres, puis de faire un RecevieString ? Un Peu comme un broadcast : ca envoie un message, puis ca attends une réponse de n'importe qui ... Envoyer les messages, ca c'est bon, mais recevoir un message de n'importe qui ... C'est ca qui me bloque ...

    Sinon, pour les threads, j'ai déja testé, mais c'est pas ce qu'il me faut !

    Je continue de chercher en tout cas ... Merci

  10. #30
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut
    Citation Envoyé par mick605 Voir le message
    Justement, n'est il pas possible d'envoyer plusieurs messages dans la meme procedure, les uns a la suite des autres, puis de faire un RecevieString ? Un Peu comme un broadcast : ca envoie un message, puis ca attends une réponse de n'importe qui ... Envoyer les messages, ca c'est bon, mais recevoir un message de n'importe qui ... C'est ca qui me bloque ...
    je n'ai pas beaucoup utilisé les composants indy, donc à toi de tester. je serai heureux de connaître la réponse.

  11. #31
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Citation Envoyé par evarisnea Voir le message
    je n'ai pas beaucoup utilisé les composants indy, donc à toi de tester. je serai heureux de connaître la réponse.
    Bon, je cherche toujours sans trouver de réponse. J'ai aussi essayé la méthode de :
    Envoyer un message
    Attendre la réponse
    Recommencer

    Mais au bout de quelques messages, ca bugge ... Enfin bref, je continue, des que j'ai une solution, je la poste ici

  12. #32
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut
    Citation Envoyé par mick605 Voir le message
    Mais au bout de quelques messages, ca bugge ... Enfin bref, je continue, des que j'ai une solution, je la poste ici
    ça freeze ou ça bug ?

  13. #33
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Ca bugge :

    ---------------------------
    Notification des exceptions du débogueur
    ---------------------------
    Le projet RechServ.exe a déclenché la classe d'exception EIdSocketError avec le message 'Socket Error # 10052
    Net dropped connection or reset.'.
    ---------------------------
    Arrêter Continuer Aide
    ---------------------------

    code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
      for I:=40 to 47 do
      begin
        for J:=0 to 255 do
        begin     
          IdUDPClient1.Active:=True;
          IdUDPClient1.Binding.SendTo('10.31.'+IntToStr(I)+'.'+IntToStr(J),55555,BytesOf(GStack.LocalAddress));
          IPServ:=IdUDPClient1.ReceiveString(100);
          IdUDPClient1.Binding.CloseSocket;
          IdUDPClient1.Active:=False;
          Application.ProcessMessages;
          PB1.Position:=J;  // Progress bar
          if IPServ<>'' then Break;
        end;
        if IPServ<>'' then Break;
      end;

  14. #34
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Salut

    Je déterre ce topic pour poster ma solution. J'ai toujours pas laissé tomber, et comme j'ai appris de nouvelles notions, j'ai créé une class qui me permet de contourner le broadcast.

    Le voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    unit UThreadRecherche;
     
    interface
     
    uses
      Windows, Classes, SysUtils, Messages, IdUDPClient, IdIcmpClient, IdGlobal, IdStack;
     
     
    type
     
      TIPThread = class(TThread)
      private
        FPlageIP : string;
        FProgress : Integer;
        FMessage  : TBytes;
        IdClient : TIdUDPClient;
        IdCmp    : TIdIcmpClient;
        function PingSimple(AIP : string) : boolean;
      protected
        procedure Execute; override;
      published
        property Progress : Integer read FProgress;
      public
        constructor Create(APlage : string; APort : integer; AMessage : string);
        destructor Destroy; override;
      end;
     
    const IpMax = 256;
     
    implementation
     
    constructor TIPThread.Create(APlage : string; APort : integer; AMessage : string);
    begin
      inherited Create(False);
      IdCmp:=TIdIcmpClient.Create;
      IdCmp.Protocol:=1;
      IdCmp.BufferSize:=8192;
      IdCmp.ReceiveTimeout:=150;
     
      IdClient:=TIdUDPClient.Create;
      IdClient.BufferSize:=8192;
      IdClient.ReceiveTimeout:=-2;
      IdClient.Port:=APort;
      IdClient.Active:=True;
     
      while APlage[Length(APlage)]<>'.' do
        Delete(APlage,Length(APlage),1);
     
      FPlageIP:=APlage;
      FMessage:=ToBytes(AMessage);
    end;
     
     
     
    destructor TIPThread.Destroy;
    begin
      IdCmp.Free;
      IdClient.Free;
      inherited;
    end;
     
     
     
    function TIPThread.PingSimple(AIP : string) : boolean;
    begin
      Result:=True;
      IdCmp.Host:=AIP;
     
      try
        IdCmp.Ping;
      finally
        if IdCmp.ReplyStatus.ReplyStatusType<>rsEcho then Result:=False;
      end;
    end;
     
     
     
    procedure TIPThread.Execute;
    var IP : string;
    begin
      FProgress:=1;
      while not(Terminated) and (FProgress<IpMax) do
      begin
        IP:=FPlageIP+IntToStr(FProgress);
        if PingSimple(IP) then
        begin
          try
            IdClient.Host:=IP;
            IdClient.Binding.SendTo(IP,IdClient.Port,FMessage);
          except
          end;
        end;
        inc(FProgress);
      end;
    end;
     
    end.
    Cette classe permet de creer un thread qui va envoyer un message sur tout les PC d'une plage qui sont connectée. Pour chaque PC, il va essayer de pinger, et si ca marche, il envoie un message UDP avec le compo IdUDPClient de Indy 10.

    Exemple d'utilisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var ThreadIP : TIPThread;
    ...
    ThreadIP:=TIPThread.Create('10.31.40.',5000,'Bonjour');
    Ce code va envoyer sur tout les PCs connectés ayant une IP de 10.31.40.1 à 10.31.40.255 le message 'Bonjour' sur le port 5000. Pour recevoir une réponse, il suffit de placer sur sa form un composant IdUDPServer.

    On peut aussi récupérer l'avancement de l'envoi des messages avec la propriété Progress (en lecture seule) qui retourne une valeur entre 1 et ipMax

    Voila, en espérant que ce code puisse aider ceux qui en ont besoin ^^

    A+

    Mick605

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [2008] Connecter une application à une base SQL située sur un réseau local
    Par ArtherKing dans le forum Administration
    Réponses: 13
    Dernier message: 05/04/2015, 10h00
  2. Réponses: 2
    Dernier message: 16/05/2013, 12h26
  3. Réponses: 6
    Dernier message: 26/07/2012, 10h28
  4. Remonter une chaîne de proxy sur un réseau local
    Par pitispike dans le forum Réseau
    Réponses: 1
    Dernier message: 19/05/2011, 15h43
  5. Liste des machines sur un réseau local (tout le réseau de Win)
    Par Lucas Panny dans le forum Web & réseau
    Réponses: 5
    Dernier message: 01/02/2009, 02h11

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