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.
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.