AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Überprüfen ob ein 'Server' online ist
Thema durchsuchen
Ansicht
Themen-Optionen

Überprüfen ob ein 'Server' online ist

Ein Thema von bl4ckb1rd · begonnen am 5. Mär 2009 · letzter Beitrag vom 6. Mär 2009
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#11

Re: Überprüfen ob ein 'Server' online ist

  Alt 5. Mär 2009, 16:27
jupp, das war bei meinem Anbiter damals.

der Server war erreichbar, aber PHP verreckte öfters mal.

da hatte ich dann mal 'ne Zeit lang eine Datei (z.B. html) geladen und dann noch eine PHP-Datei ausführen lassen und bei beidem prüfte ich dann den Inhalt ... vorallem das Script lieferte mir von der URL(einem Parameter) abhängige Inhalte und so konnte ich prüfen ob deses auch lief.

also der Server war immer ereichbar, aber PHP und manchmal auch http selbst versagte. (interne Serverprobleme)
$2B or not $2B
  Mit Zitat antworten Zitat
bl4ckb1rd

Registriert seit: 3. Okt 2008
53 Beiträge
 
#12

Re: Überprüfen ob ein 'Server' online ist

  Alt 5. Mär 2009, 18:52
Was schlägt ihr mir dann vor wie ich kontrollieren kann ob der 'andere' PC online ist und auch reagiert?

Wenns hilf, genauere Info: Mit Server ist der Spiel-Server Call of Duty 4 gemeint. Weiß jemand wie ich dann überprüfen kann ob dieser online ist? IP + Port vom Server: arm1.ath.cx:28960
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#13

Re: Überprüfen ob ein 'Server' online ist

  Alt 5. Mär 2009, 19:06
Es wurden dir doch schon genug Möglichkeiten genannt. Wo ist jtzt das Problem?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
bl4ckb1rd

Registriert seit: 3. Okt 2008
53 Beiträge
 
#14

Re: Überprüfen ob ein 'Server' online ist

  Alt 5. Mär 2009, 21:23
Hab jetzt eine Unit gefunden mit der ich eine IP anpingen kann. Doch wenn ich diese Unit compiliere spuckt mir der Compiler folgende Fehler Meldung aus: [DCC Fehler] Unit2.pas(79): E2010 Inkompatible Typen: 'Char' und 'AnsiChar'

Betroffen ist die Zeile 79 (phe := GetHostByName(PChar(AIP)) phe ist PHostEnt

Und hier ist die ganze Unit die ich gefunden habe und gerne benutzen würde:

Delphi-Quellcode:
unit Unit2;

interface
uses
  Windows, SysUtils, Classes;

type
  TSunB = packed record
    s_b1, s_b2, s_b3, s_b4: byte;
  end;

  TSunW = packed record
    s_w1, s_w2: word;
  end;

  PIPAddr = ^TIPAddr;
  TIPAddr = record
    case integer of
      0: (S_un_b: TSunB);
      1: (S_un_w: TSunW);
      2: (S_addr: longword);
  end;

 IPAddr = TIPAddr;

function IcmpCreateFile : THandle; stdcall; external 'icmp.dll';
function IcmpCloseHandle (icmpHandle : THandle) : boolean;
            stdcall; external 'icmp.dll';
function IcmpSendEcho
   (IcmpHandle : THandle; DestinationAddress : IPAddr;
    RequestData : Pointer; RequestSize : Smallint;
    RequestOptions : pointer;
    ReplyBuffer : Pointer;
    ReplySize : DWORD;
    Timeout : DWORD) : DWORD; stdcall; external 'icmp.dll';


function Ping(InetAddress : string) : boolean;

implementation

uses
  WinSock;

function Fetch(var AInput: string;
                      const ADelim: string = ' ';
                      const ADelete: Boolean = true)
 : string;
var
  iPos: Integer;
begin
  if ADelim = #0 then begin
    // AnsiPos does not work with #0
    iPos := Pos(ADelim, AInput);
  end else begin
    iPos := Pos(ADelim, AInput);
  end;
  if iPos = 0 then begin
    Result := AInput;
    if ADelete then begin
      AInput := '';
    end;
  end else begin
    result := Copy(AInput, 1, iPos - 1);
    if ADelete then begin
      Delete(AInput, 1, iPos + Length(ADelim) - 1);
    end;
  end;
end;

procedure TranslateStringToTInAddr(AIP: string; var AInAddr);
var
  phe: PHostEnt;
  pac: PChar;
  GInitData: TWSAData;
begin
  WSAStartup($101, GInitData);
  try
    phe := GetHostByName(PChar(AIP));
    if Assigned(phe) then
    begin
      pac := 'phe^.h_addr_list^';
      if Assigned(pac) then
      begin
        with TIPAddr(AInAddr).S_un_b do begin
          s_b1 := Byte(pac[0]);
          s_b2 := Byte(pac[1]);
          s_b3 := Byte(pac[2]);
          s_b4 := Byte(pac[3]);
        end;
      end
      else
      begin
        raise Exception.Create('Error getting IP from HostName');
      end;
    end
    else
    begin
      raise Exception.Create('Error getting HostName');
    end;
  except
    FillChar(AInAddr, SizeOf(AInAddr), #0);
  end;
  WSACleanup;
end;

function Ping(InetAddress : string) : boolean;
var
 Handle : THandle;
 InAddr : IPAddr;
 DW : DWORD;
 rep : array[1..128] of byte;
begin
  result := false;
  Handle := IcmpCreateFile;
  if Handle = INVALID_HANDLE_VALUE then
   Exit;
  TranslateStringToTInAddr(InetAddress, InAddr);
  DW := IcmpSendEcho(Handle, InAddr, nil, 0, nil, @rep, 128, 0);
  Result := (DW <> 0);
  IcmpCloseHandle(Handle);
end;

end.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#15

Re: Überprüfen ob ein 'Server' online ist

  Alt 5. Mär 2009, 21:34
dann sachau doch mal nach was GetHostByName für einen Parameter haben möchte (ich vermute mal einen PAnsiChar und du übergibst PChar)


PS: du solltest deine Delphi-Version mal ins DP-Profil eintragen, oder diese in bei deinen Fragen mit erwähnen.
(diese Angabe ist nicht nur zum Angeben, sondern damit man weiß auf welches System man seine Antworten beziehen muß)

Aber ich bin mir sicher daß du D2009 (richtig getippt?) nutzt und da ist ... PChar = PWideChar
$2B or not $2B
  Mit Zitat antworten Zitat
bl4ckb1rd

Registriert seit: 3. Okt 2008
53 Beiträge
 
#16

Re: Überprüfen ob ein 'Server' online ist

  Alt 5. Mär 2009, 22:16
ok problem gelöst, ich benutzte d2009, richgitg geraten , und habe auch überal pcahr mit pansichar ersetzt.

Nun wenn ich alles starte bekomme ich jedesmal den Fehler: Error getting HostName. Dieser wird nur dann aufgerufen wenn Assigned(phe) false ist. Keine Ahnung was Assigned(phe) heißt o.O

Ich habe die DynDNS arm1.ath.cx eingeben -> ging nicht
Auch mit der IP die sich hinter arm1.ath.cx befindet gehts auch
sogar 127.0.0.1 nimmt er auch nicht an o.O
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#17

Re: Überprüfen ob ein 'Server' online ist

  Alt 5. Mär 2009, 22:18
Zitat von bl4ckb1rd:
ok problem gelöst, ich benutzte d2009, richgitg geraten , und habe auch überal pcahr mit pansichar ersetzt.
du hast aber auch den zugehörigen String geändert?

Assigned(phe) entspricht phe <> nil
$2B or not $2B
  Mit Zitat antworten Zitat
bl4ckb1rd

Registriert seit: 3. Okt 2008
53 Beiträge
 
#18

Re: Überprüfen ob ein 'Server' online ist

  Alt 5. Mär 2009, 22:30
wie soll ich den dazugehörigen string ändern?

Bei mir sieht das ganz so aus: pac: PAnsiChar; und weiter unten:

phe := GetHostByName(PAnsiChar(AIP)); vorher sah das so aus:

pac: PChar; und

phe := GetHostByName(PChar(AIP));
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#19

Re: Überprüfen ob ein 'Server' online ist

  Alt 5. Mär 2009, 22:46
PChar + AIP als String

PAnsiChar + AIP als AnsiString

aber eigentlich sollte Delphi da auch meckern, wenn man PAnsiChar auf einen String/WideString/UnicodeString anwendet
$2B or not $2B
  Mit Zitat antworten Zitat
bl4ckb1rd

Registriert seit: 3. Okt 2008
53 Beiträge
 
#20

Re: Überprüfen ob ein 'Server' online ist

  Alt 6. Mär 2009, 14:23
Klasse!!!!!!!!!!!!!!!!!!!!!!

Alles funktioniert suuuuper

Größten DANK!!!!!!!!!!!!!




  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz