Welkom bij de Tweaking4All gemeenschapsforums!
Voor je gaat deelnemen, bekijk de Forum Regels!
Specifieke onderwerpen: Start het onderwerp met de naam van het programma of systeem.
Bijvoorbeeld “MacOS X – Jouw vraag“, of bijvoorbeeld “MS Word – Jouw Tip of Truc“.
Merk op: Omschakelen naar een andere taal zal niet werken als je een post aan het lezen bent aangezien er waarschijnlijk geen vertaling beschikbaar is.
[Opgelost] Lazarus - MacOS X/Linux - Network Ping doen vanuit jouw programma
Delphi, Lazarus, Free Pascal
(@hans)
Famed Member Admin
Deelgenomen: 12 jaar geleden
Berichten: 2864
Topic starter
26 april 2016 0:31
Om een Ping te doen zou je Synapse kunnen gebruiken, maar helaas heb ik geen van de voorbeelden aan de gang gekregen - naar men zegt omdat onder bepaalde systemen sudo rechten nodig zijn om dit te kunnen doen (en je dus jouw application als sudo moet uitboeren).
Echter,... met een eenvoudige truc, door deTerminal/Commandline "ping" te gebruiken, maakt het wel mogelijk.
Je zult de "process" unit aan de Uses Clausule moeten toevoegen.
Even snel in een simpele functie voor Linux and MacOS X - dit werkt dus NIET onder Windows:
function TForm1.Ping(Host:string):boolean;
var s : ansistring;
const PingCount = '1'; // number of pings
PingTimeout = '2'; // timout for each ping
begin
{$IFDEF Darwin}
RunCommand('/sbin/ping',['-c '+PingCount,'-t '+PingTimeout,'-q',Host],s);
{$ELSE}
RunCommand('/bin/ping',['-c '+PingCount,'-w '+PingTimeout,'-q',Host],s);
{$ENDIF}
Result := (pos('100.0% packet loss',S)=0) and (pos('100% packet loss',S)=0);
end;
Getest onder MacOS X en Linux (Ubuntu / Freya OS).
Je ziet dat de time out parameter en locatie van ping onder MacOS X (-t) net even anders is dan onder Linux (-w). Dit kan dus ook voor jouw Linux versie weer anders zijn.
(@hans)
Famed Member Admin
Deelgenomen: 12 jaar geleden
Berichten: 2864
Topic starter
2 mei 2016 20:20
Een versie die ook voor Windows werkt: (getest met Windows 10 en MacOS X El Capitan).
Nadeel onder Windows is wel dat een kort Terminal venster verschijnt en weer verdwijnt.
function Ping(Host:string):boolean;
var s : ansistring;
const PingCount = '2'; // number of pings
PingTimeout = '2'; // timout for each ping
begin
s:='';
{$IFDEF Darwin}
RunCommand('/sbin/ping',['-c '+PingCount,'-t '+PingTimeout,'-q',Host],s);
{$ENDIF}
{$IFDEF Windows}
RunCommand('ping.exe',['-n ',PingCount,'-w ',PingTimeout,Host],s);
{$ENDIF}
Result := (pos('100.0% packet loss',S)=0) and (pos('100% packet loss',S)=0) and (pos('100% loss',S)=0);
end;