Toon posts:

[DELPHI] Pingen

Pagina: 1
Acties:

Verwijderd

Topicstarter
heb een delphi progje gemaakt om je netwerkstatus te checken dmv pingen. Maar het gaat niet helemaal goed. Ik heb van Torry een ping component gedownload, waarschijnlijk werkt deze niet helemaal goed.

Heeft iemand een idee hoe ik met delphi 6 kan pingen? En eventueel waar ik een ping component kan vinden voor delphi 6?

Mijn source staat hier: http://members.home.nl/sub0/source.zip
Weet niet of je er iets mee kan, je hebt nml dat component niet.

Verwijderd

'k ga eens ff kijken voor je :+

[edit]
Sorry! De pagina die u heeft opgevraagd, is niet beschikbaar



Controleer de URL op eventuele typefouten.

  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
Zoek op torry naar indy.

Verwijderd

indy zit ook standaard in delphi 6 enterprise dacht ik

Verwijderd

Topicstarter
en hoe kan ik indy dan gebruiken in mijn programma? Ja lach maar....

Verwijderd

Ik zal nu wel even voor je kijken, heb zelf nog nooit met indy gewerkt...

Verwijderd

Topicstarter
Op dinsdag 12 maart 2002 20:03 schreef MrIpFiReWALL het volgende:
'k ga eens ff kijken voor je :+

[edit]
Sorry! De pagina die u heeft opgevraagd, is niet beschikbaar



Controleer de URL op eventuele typefouten.
gefixed

Verwijderd

Ik heb het al gevonden....

In delphi 6 enterprise (als je die hebt), heb je een componententabblad (scrabble :9~) genaamd Indy Clients

Dan pleur je een IdICMPClient (roze flitsje) op je form en dat is alweer het halve werk.
Je vult bij properties het ip in, of je doet dit op runtime, je vult de poortnummer in (poort 7).
Bij events dubbelklik je op de OnReply event en je ziet daar dat er wat variabelen etc worden meegegeven bij een echo reply....dat moet je zelf verder maar uitzoeken.

En je moet natuurlijk de functie IdIcmpClient1.Ping ergens aanroepen....

Suc6 ermee!

edit:

Je kan dit wel gebruiken bij de OnReply Event:
ShowMessage(IntToStr(AReplyStatus.BytesReceived) + ' bytes received from ' + AReplyStatus.FromIpAddress + '!');

BytesReceived is 0 als die geen ping antwoord kreeg, en ip adres is ook 0.0.0.0 als er geen reply was....nou makkelijker kan ik het niet voor je maken :)

Verwijderd

Simpel command line voorbeeldje van ping met Indy:
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
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
program EWPing;
{$APPTYPE CONSOLE}

uses
  SysUtils,
  Classes,
  {$IFNDEF Linux}
  Windows,
  {$ENDIF}
  IdIcmpClient,
  IdBaseComponent,
  IdComponent,
  IdRawBase,
  IdRawClient;

var
  sHost: string = '';
  iTimes: integer = 0;

type
  TPingHelper = class
  private
    FTimeCreated: TDateTime;
    FHost: string;
    FAddress: string;
    FCount: integer;
    FLoss: integer;
    FRoundTrip: integer;
    function GetRoundTrip: integer;
    procedure SetRoundTrip(const Value: integer);
  protected
    procedure PingReply(ASender: TComponent; const ReplyStatus: TReplyStatus);
  public
    constructor Create;
    procedure Ping(AHost: string; Times: integer);
    procedure GetStatistics;
    property Host: string read FHost write FHost;
    property Address: string read FAddress write FAddress;
    property Count: integer read FCount write FCount;
    property Loss: integer read FLoss write FLoss;
    property RoundTrip: integer read GetRoundTrip write SetRoundTrip;
  end;

constructor TPingHelper.Create;
begin
  FTimeCreated := Now;
  FHost := '';
  FAddress := '';
  FCount := -1;
  FLoss := 0;
  FRoundTrip := 0;
end;

function TPingHelper.GetRoundTrip: integer;
begin
  Result := 0;
  if (FCount - FLoss > 0) then
    Result := Trunc(FRoundTrip / (FCount - FLoss));
end;

procedure TPingHelper.SetRoundTrip(const Value: integer);
begin
  FRoundTrip := FRoundTrip + Value;
end;

procedure TPingHelper.Ping(AHost: string; Times: integer);
var
  i: integer;
begin
  Host := AHost;
  with TIdIcmpClient.Create(nil) do try
    OnReply := PingReply;
    ReceiveTimeout := 2000;
    Host := AHost;
    for i := 0 to Times do begin
    Ping;
    Sleep(100);
    end;
  finally
    Free;
  end;
end;

procedure TPingHelper.GetStatistics;
begin
  WriteLn(Format('IP %s, %d Tries, %d Losses, RoundTrip of %d ms',
             [Address, Count, Loss, RoundTrip]));
end;

procedure TPingHelper.PingReply(ASender: TComponent; const ReplyStatus: TReplyStatus);
var
  sTime: string;
begin
  Count := Count + 1;
  if Count = 0 then Exit;
  with ReplyStatus do begin
    if BytesReceived = 0 then begin
    WriteLn('Timeout');
    Loss := Loss + 1;
    end else begin
    if (MsRoundTripTime = 0) then
      sTime := '<1'
    else
      sTime := '=';
    WriteLn(Format('%d bytes from %s: icmp_seq=%d ttl=%d time%s%d ms',
               [BytesReceived, FromIpAddress, SequenceId, 
                TimeToLive, sTime, MsRoundTripTime]));
    Address := FromIpAddress;
    RoundTrip := MsRoundTripTime;
    end;
  end;
end;

function ParseParameters: boolean;
type
  TSwitchType = (stNone, stTimes);
var
  SwitchType, ChkType: TSwitchType;
  i: integer;
  sParam: string;

  function CheckSwitch(const AParam: string): TSwitchType;
  var
    s: string;
  begin
    s := LowerCase(AParam);
    if (s = '-c') or (s = '/c') then Result := stTimes
    else Result := stNone;
  end;

begin
  Result := True;
  SwitchType := stNone;
  for i := 1 to ParamCount do begin
    sParam := ParamStr(i);
    ChkType := CheckSwitch(sParam);
    case SwitchType of
    stNone:  case ChkType of
             stNone:  if sHost = '' then
                    sHost := sParam
                  else
                    Result := False;
             stTimes: SwitchType := stTimes;
           end;
    stTimes: case ChkType of
             stNone:  if iTimes = 0 then try
                    iTimes := StrToInt(sParam);
                    SwitchType := stNone;
                  except
                    Result := False
                  end else
                    Result := False;
             stTimes: Result := False;
           end;
    end;
    if not Result then
    Exit;
  end;
  if Result then
    Result := (sHost > '');
end;

begin
  if ParseParameters then begin
    if iTimes = 0 then
    iTimes := 4; // default to 4 pings
    with TPingHelper.Create do try
    Ping(sHost, iTimes);
    GetStatistics;
    finally
    Free;
    end;
  end else
    WriteLn('Syntax: ' + ExtractFileName(ParamStr(0)) + ' address [-c number of times]');
  WriteLn(' ');
end.

Die PingHelper class is in dit geval misschien een beetje overdone, maar 't is een uitgeklede versie van een pingmonitor waar ik mee bezig ben. In 't echt kan 'ie ook results in een database opslaan en zo.

  • Eegee
  • Registratie: Januari 2000
  • Laatst online: 11-09 16:21
ICS van François Piette. Is zoiets als Indy. Er zit een Ping VCL component bij.

http://overbyte.alexid.fr/eng/products/ics.html

Verwijderd

Op dinsdag 12 maart 2002 22:27 schreef Eegee het volgende:
ICS van François Piette. Is zoiets als Indy. Er zit een Ping VCL component bij.
2 Jaar terug heb ik ICS gebruikt om messages van 14 klanten naar 1 centraal punt te krijgen (14 hotels die op 1 Terminal Server werkten, maar de telefoon charges van de gasten werden via een seriele poort aangeleverd. Die moesten dus via IP naar die centrale server).

Ik heb dat nooit stabiel gekregen, en na een tijdje klungelen zijn we toen overgestapt op NetMasters. Ook dat was niet ideaal, maar sinds een jaar of zo via Indy draait 't volledig storings- en onderhoudsvrij.

Petje af voor meneer Piette, want wat hij in z'n uppie toendertijd leverde was beter dan de rest, maar ik zou zelf niet meer zo snel ICS als IP-oplossing kiezen.
Maar waarschijnlijk is ICS ook gewoon doorontwikkeld, en ben ik bevooroordeeld geraakt door eerdere ervaringen...
Pagina: 1