Get ip avec indy

Soyez le premier à donner votre avis sur cette source.

Vue 7 001 fois - Téléchargée 1 217 fois

Description

Utilise Indy pour obtenir l'IP de son site, même au travers d'un routeur.
Le site checkip.dyndns.org est consulté. Les autres sites provoquent des déconnexions.

Source / Exemple :


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,IdTCPClient,IdException, ComCtrls,StrUtils;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
    procedure IdClientSocket1Connect(Sender: TObject);
    //procedure IdClientDisconnected (Sender: TObject);
  end;

var
  Form1: TForm1;
  IdTCPClient1: TIdTCPClient;
const CRLF= chr(13)+Chr(10);

implementation

{$R *.dfm}
//function getip:string; stdcall; external 'get_public_ip';

procedure TForm1.Button1Click(Sender: TObject);
begin
//programmation du port de communication
  IdTCPClient1:= TIdTCPClient.Create(self);
  IdTCPClient1.Host:= 'checkip.dyndns.org';
  //IdTCPClient1.Host:= 'www.adresseip.com';
  IdTCPClient1.Port:= 80;
  IdTCPClient1.ConnectTimeout:= 10000;
  IdTCPClient1.OnConnected:= IdClientSocket1Connect;
  IdTCPClient1.ReadTimeout:=5000;
  try
    IdTCPClient1.Connect;
  except
  on E: EIdException do
    begin
      If E.message = 'Socket Error # 11004'#$D#$A then
      Showmessage('Pas de connexion internet');
    end;

  end;
end;

procedure TForm1.IdClientSocket1Connect(Sender: TObject);
//la connexion a eu lieu: on lit la page retournée
VAR
Str1: string;
P: integer;
begin
  IdTCPClient1.Socket.WriteLn('GET /HTTP/1.1');
  IdTCPClient1.Socket.WriteLn('');
  Str1:= IdTCPClient1.Socket.ReadLn(CRLF);
  if Str1='HTTP/1.1 204 NO RESPONSE' then
  Begin
    Showmessage('Le serveur ne répond pas: il y a une erreur.');
   exit;
  End;
  if length(Str1)=0 then   //le timeout a déclenché
  Begin   //le n'a pas répondu dans le temps
    Showmessage( 'Le serveur n''a pas répondu.');
   exit;
  End;
  //lire la réponse jusqu'à ce qu'on trouve ip address.
  repeat
    Str1:= IdTCPClient1.Socket.ReadLn(CRLF);
    P:= pos('current ip address',lowercase(Str1))
  until P>0;
  P:= posex(':',Str1,P)+1;
  Str1:= copy(Str1,P);
  P:=pos('<',Str1)-1;
  Str1:=copy(str1,1,P);
  Edit1.Text:= str1;
  IdTCPClient1.Disconnect;
end;

end.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
121
Date d'inscription
jeudi 10 janvier 2002
Statut
Membre
Dernière intervention
7 août 2018

Je pense que c'est Indy10. C'est ce que je trouve quand j'explore le dossier Borland...
J'utilise Turbo Delphi et Delphi 2007.
Effectivement il y a doublon, pas tout à fait à cause de Indy, mais lorsque j'avais fait une recherche pour voir s'il existait un code je n'avais rien trouvé...
Je me suis paluché ce code pas par plaisir mais par nécessité. Il doit être intégré dans un code beaucoup plus lourd (qui n'est pas de moi!) et je ne pense pas que son auteur accepte volontiers d'ajouter un web browser dans son appli alors qu'il y a déjà un port Indy.
Il ne m'a pas signalé qu'il avait des problèmes, mais il travaille avec les mêmes outils que moi...
Messages postés
460
Date d'inscription
dimanche 5 décembre 2004
Statut
Membre
Dernière intervention
6 avril 2009
2
Au fait pour quelle version d'Indy ?

@+,

Cincap

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.