[DELPHI] Hostname

Pagina: 1
Acties:
  • 172 views sinds 30-01-2008
  • Reageer

  • Cypher87
  • Registratie: Oktober 2004
  • Laatst online: 23-01 17:24
Ik heb het volgende stukje code:

Delphi:
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
unit main;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, wsocket, StdCtrls, IdBaseComponent, IdComponent, IdTCPServer,
  ExtCtrls;
 
type
  TForm1 = class(TForm)
    Label1: TLabel;
    Button1: TButton;
    server: TIdTCPServer;
    procedure serverConnect(AThread: TIdPeerThread);
    procedure serverExecute(AThread: TIdPeerThread);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    procedure GetHostName(IP: string);
    procedure WSocket1DnsLookupDone(Sender: TObject;
  Error: Word);
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
Procedure TForm1.WSocket1DnsLookupDone(Sender: TObject;
  Error: Word);
begin
   if error = 0 then
   begin
     Label1.Caption := 'IP: ' + TWSocket(Sender).DnsResult;
     exit;
   end
   else
        Label1.Caption := 'IP: ' + inttostr(error);
end;
 
procedure TForm1.GetHostName(IP: string);
var
  WSocket1: TWSocket;
begin
  Wsocket1 := TWSocket.Create(form1);
  WSocket1.OnDnsLookupDone := Form1.WSocket1DnsLookupDone;
  Wsocket1.ReverseDnsLookup(IP);
end;
 
procedure TForm1.serverConnect(AThread: TIdPeerThread);
begin
  GetHostName('127.0.0.1');
end;
 
procedure TForm1.serverExecute(AThread: TIdPeerThread);
begin
  form1.caption:=AThread.Connection.LocalName;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  GetHostName('127.0.0.1');
end;


Nou zit ik met het probleem dat wanneer ik de procedure GetHostName() aanroep vanuit ServerConnect het programma nooit aan WSocket1DnsLookupDone toe komt. Terwijl wanneer ik dezelfde procedure aanroep vanuit Button1Click() er niks aan de hand is. Kan iemand mij vertellen wat ik hier mogelijk fout doe?

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Dat component doet aan Caching?

We adore chaos because we like to restore order - M.C. Escher


  • Rum
  • Registratie: Augustus 2002
  • Laatst online: 07-03 13:06

Rum

Is dit alle code? Die server wacht op client-verbindingen en zal dan het onConnect-event opwekken. Dat stukje code zal dus niets doen zolang er geen client verbinding maakt.Het is dan ook logisch dat je alleen bij button1click de DNSLookup uitvoert.

[ Voor 64% gewijzigd door Rum op 16-01-2006 14:00 ]


  • Cypher87
  • Registratie: Oktober 2004
  • Laatst online: 23-01 17:24
Ik weet ook wel dat er een client verbinding moet maken, maar dat is dus het probleem. Als de client verbinding maakt wil ik de hostname hebben van de client. Ik dacht dit dus even simpel zo te kunnen doen maar dat werkt dus niet. Dit is trouwens ook niet het eindprogramma, maar is alleen even om te testen.

  • Rum
  • Registratie: Augustus 2002
  • Laatst online: 07-03 13:06

Rum

Ik heb ff wat voor je gemaakt. Ik neem aan dat dit is wat je wilt?

code:
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
unit main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, wsocket, StdCtrls, IdBaseComponent, IdComponent, IdTCPServer,
  ExtCtrls, IdTCPConnection, IdTCPClient, IdStack;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Button1: TButton; 
    server: TIdTCPServer;
    IdTCPClient1: TIdTCPClient;
    procedure serverConnect(AThread: TIdPeerThread); 
    procedure serverExecute(AThread: TIdPeerThread);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations } 
  public

  end;
  
var
  Form1: TForm1; 

implementation
  
{$R *.dfm}

procedure TForm1.serverConnect(AThread: TIdPeerThread);
begin
  label1.caption := GStack.WSGetHostByAddr(athread.Connection.Socket.Binding.PeerIP);
end;

procedure TForm1.serverExecute(AThread: TIdPeerThread);
begin
  form1.caption:=AThread.Connection.LocalName; 
end; 

procedure TForm1.Button1Click(Sender: TObject);
begin
  IdTCPClient1.Connect(100);
end;

end.


GStack maakt deel uit van idStack. Als je die dus aan je uses toevoegt, kun je zo je HostName bij je peer-IP ophalen.

[ Voor 6% gewijzigd door Rum op 16-01-2006 17:00 ]


  • Cypher87
  • Registratie: Oktober 2004
  • Laatst online: 23-01 17:24
Works like a charm.

Bedankt!
Pagina: 1