![]() |
Re: Überprüfen ob ein 'Server' online ist
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) |
Re: Überprüfen ob ein 'Server' online ist
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 |
Re: Überprüfen ob ein 'Server' online ist
Es wurden dir doch schon genug Möglichkeiten genannt. Wo ist jtzt das Problem?
|
Re: Überprüfen ob ein 'Server' online ist
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. |
Re: Überprüfen ob ein 'Server' online ist
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 |
Re: Überprüfen ob ein 'Server' online ist
ok problem gelöst, ich benutzte d2009, richgitg geraten :D, 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 |
Re: Überprüfen ob ein 'Server' online ist
Zitat:
Assigned(phe) entspricht phe <> nil |
Re: Überprüfen ob ein 'Server' online ist
wie soll ich den dazugehörigen string ändern?
Bei mir sieht das ganz so aus:
Delphi-Quellcode:
und weiter unten:
pac: PAnsiChar;
Delphi-Quellcode:
vorher sah das so aus:
phe := GetHostByName(PAnsiChar(AIP));
Delphi-Quellcode:
und
pac: PChar;
Delphi-Quellcode:
phe := GetHostByName(PChar(AIP));
|
Re: Überprüfen ob ein 'Server' online ist
PChar + AIP als String
PAnsiChar + AIP als AnsiString aber eigentlich sollte Delphi da auch meckern, wenn man PAnsiChar auf einen String/WideString/UnicodeString anwendet |
Re: Überprüfen ob ein 'Server' online ist
Klasse!!!!!!!!!!!!!!!!!!!!!!
Alles funktioniert suuuuper :D Größten DANK!!!!!!!!!!!!! :dp: :dp: :dp: :dp: :dp: :bounce2: :bounce2: :bounce2: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz