![]() |
Re: Wake on LAN
Zitat:
Zitat:
Nunja, aber ich verwende noch Indy 9 und dabei wird der Port bereits als Integer verlangt. Hätte ich ihn als String übergeben würde der Compiler gar nicht erst anfangen zu compilieren :) Aber die Möglichkeit, dass die Fehler durch die Verwendung von verschiedenen Indy-Versionen zustande kommt, dass die Schweizer eine andere Version verwenden als ich wäre immerhin höchst wahrscheinlich. Immerhin ist der erste Teil des Threads bereits etwas älter. Danke für den Hinweis! Und zu der WakeOnLAN Bestätigung, ich glaube zwar nicht, dass hier ein TCP-Protokoll funktioniert, aber ich werde es dennoch demnächst testen. Vielleicht will es ja irgendwie. Oder mir kommt während dessen eine andere Idee. Aber ich glaube nicht, dass es die Möglichkeit gibt. Die Netzwerkkarte schläft ja quasi noch. Obwohl, Daten empfangen kann sie ja, also sollte sie doch fähig sein welche zu versenden. Mhh... Probieren geht über Studieren :) Werd mir aber trotzdem mal (demnächst!) die MagicPaket-Funktion(en) genauer anschauen. Vielleicht hat ja AMD dazu schon etwas entwickelt. Oder die Hersteller einzelner Grafikkarten haben sich selbst an die Nase gegriffen und haben gesagt "Mensch, wenn jemand einen PC im Keller stehen hat und den durch das super coole (damals noch neue) WakeOnLAN hochfährt könnte man ihm das doch auch quittieren. Sonst würde er im Dunkeln tappen und erst nach ein paar Minuten erfahren ob das WakeOnLAN funktioniert hat!" :) Aber das erst demnächst, denn im Moment klappt es und das werd ich erstmal so hinnehmen. Denn es gibt derzeit viel wichtigeres zu tun! :coder: Vielen Dank soweit an alle! Gruß, Robert |
Re: Wake on LAN
Ich habe das mit der Rückantwort so gelöst, dass mein Programm nach dem Senden des Magic Packets vom Desktop verschwindet, im Hintergrund aber noch eine Weile weiterläuft und nach 30 Sekunden in 15 Sekündigen Abständen einen Ping an den Remote Host absetzt. Bekomm ich ne Antwort vom Host, erscheint ne Meldung, dass der PC hochgefahren ist, wenn nach 2 Minuten nichts zurückkommt, kommt ne Fehlermeldung. Ist zwar nicht so komfortabel wie ne direkte Rückmeldung, ich weiß aber immerhin nach spätestens 2 Minuten, woran ich bin. Die Zeiten kann man ja auch noch anpassen...
Gruß Gambit |
Re: Wake on LAN
So hab ich das bisher auch umgesetzt und setze das schon eine Weile ein (allerdings vorher mit einem externen Tool das ich nur mit ShellExecute aufgerufen hab).
Es ist erstmal eine Lösung, ja. Aber wie du schon sagst keinesfalls komfortabel. Wenn der Rechner, so wie meiner, bis zu 5 Minuten brauch bis er hochgefahren ist, ist es regelrecht belastend zu wissen der Rechner ist nach 5 Minuten noch nicht oben und ich muss noch ein MagicPaket abschicken um wieder nach 5 Minuten evtl. zu erfahren er hat es wieder nicht geschaft. Denn sonst, wenn ich sofort wüsste ob der Rechner auf das MagicPaket nicht reagiert hat könnte ich ein paar weitere schicken um es nochmal zu versuchen. Aber es muss erstmal so gehen. Weiß denn jemand welche Gründe es haben könnte, dass der Rechner mal reagiert und mal nicht? Den einen Tag saß ich echt davor... hatte das Programmicon in dem Ordner das einfach nur das MagicPaket absendete (ohne irgendwelche Meldungen/Überprüfungen). Ich wusste es funktioniert auf jeden Fall. Ich hab es zig mal gestartet und kurioser Weise jedesmal der Rechner jedesmal wenn ich das Programm (!) per Doppelklick mit der Maus öffete. Der Rechner blieb aber jedesmal aus wenn ich das Programm durch (vorher Markieren und) Enter drücken startete! Zufall? :gruebel: :cyclops: :shock: Gruß, Robert |
Re: Wake on LAN
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab das nochmal durchgeguckt und bin zu folgendem funktionierenden Code gekommen:
Delphi-Quellcode:
Hier die .dfm (also alles was quasi in der Fensteransicht eingestellt wurde)
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdUDPBase, IdUDPClient; type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; IdUDPClient1: TIdUDPClient; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} { What's a Magic Packet? Was ist ein Magic Packet? DESTINATION SOURCE MISC. FF FF FF FF FF FF 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 MISC. CRC. Note: Destination, Source, Misc and CRC are normally added by our Socket-Component Beachte: Destination, Source, Mis und CRC werden normalerweise von deiner Socket-Komponente hinzugefügt } procedure TForm1.Button1Click(Sender: TObject); var Data, temp: string; k, n: integer; begin Data := ''; for k := 0 to 5 do begin Data := Data + Chr(StrToInt('$FF')); // 6x add a FF / 6x ein FF hinzufügen end; temp := StringReplace(Edit1.Text, '-', '', [rfReplaceAll]); for k := 0 to 15 do begin temp := StringReplace(Edit1.Text, '-', '', [rfReplaceAll]); for n := 0 to 5 do begin // 16x add Target-Mac-Adress / 16x die Ziel-Macadresse hinzufügen Data := Data + Chr(StrToInt('$' + temp[1] + temp[2])); Delete(temp, 1, 2); end; end; //Example with TIdUDPClient of Indy IdUDPClient1.Host:= '255.255.255.255'; IdUDPClient1.Port:= 80; IdUDPClient1.Send(Data); // Send it / Verschick es end; end.
Delphi-Quellcode:
Damit Wake On Lan funktioniert muss die Funktion natürlich im Bios des betreffenden Rechners aktiviert sein. Außerdem endet ein solcher Boardcast beim Router, wenn ihr also in ein anderes Subnetz wollt um ein Rechner zu booten, dann weis ich jetzt spontan auch nicht weiter.. Jedenfalls geht das Programm bei mir.
object Form1: TForm1
Left = 0 Top = 0 Caption = 'Form1' ClientHeight = 294 ClientWidth = 562 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'Tahoma' Font.Style = [] OldCreateOrder = False PixelsPerInch = 96 TextHeight = 13 object Button1: TButton Left = 216 Top = 120 Width = 75 Height = 25 Caption = 'Button1' TabOrder = 0 OnClick = Button1Click end object Edit1: TEdit Left = 168 Top = 80 Width = 249 Height = 21 TabOrder = 1 Text = 'aa-bb-cc-dd-ee-ff' end object IdUDPClient1: TIdUDPClient BroadcastEnabled = True Port = 80 Left = 424 Top = 216 end end |
Re: Wake on LAN
Zitat:
Zum Routerproblem: Ein Broadcast endet an der nächsten Kollisionsdomäne - in diesem Falle der Router. Broadcasts werden nicht geroutet, sonst wäre im Netz unwesentlich mehr los. Es gibt aber einen Trick: Das ganze als Paket an den Router senden mit einem benannten Port (z.B. 1234). Im Router dann ein Port-Forwarding einrichten, und eingehende Pakete auf Port 1324 forwarden auf die lokale Broadcast-Adresse. Das klappt soweit ganz gut, nur so populäre Boxen wie die FritzBox unterbinden das, weil die FritzBox meint, du wüsstest nicht was du tust :mrgreen: Mit ein wenig basteln, ist das aber bei (fast) jedem Router hinzukriegen |
Re: Wake on LAN
Zitat:
|
AW: Wake on LAN
Ich weiß der Thread ist schon etwas älter, allerdings bekomme ich beim senden des Magic Packets den Fehler "Socket Error # 11001 Host not found"
Das ist merkwürdig, denn mit derselben MAC Adresse kann ich jederzeit problemlos mit einem anderen Programm den Rechner aus dem Schlaf erwecken. Der Code ist bis auf:
Delphi-Quellcode:
identisch.
IdUDPClient1.Host:= Edit1.Text; bzw. IdUDPClient1.Host:= '192.168.0.255';
IdUDPClient1.Port:= 80; IdUDPClient1.Send(Data); // Send it / Verschick es end; Mit dem Text aus dem Edit gibts den oben genannten fehler, mit der IP Range passiert gar nichts. Keine Fehlermeldung, nichts. Hab ich irgendwo einen Denkfehler drin, oder ist es einfach nur zu spät :) Broadcast und Active vom UDPIndyClient sind aktiv. |
AW: Wake on LAN
Was enthält "Data"?
![]() Die Netzwerkkarte wartet auf ein so genanntes Magic Packet (Schutzmarke von AMD), bei dessen Empfang der Rechner eingeschaltet wird. Das Datenpaket ist entweder direkt an die Netzwerkkarte adressiert oder wird als Broadcast verschickt. Es enthält sechsmal in Folge den hexadezimalen Wert FF; unmittelbar danach erscheint die ununterbrochene 16-malige Wiederholung der MAC-Adresse der Netzwerkkarte. Dieser Inhalt kann in ein beliebiges Paket (z. B. IP, IPX) verpackt sein. Es existieren viele Software-Tools (z. B. etherwake für unixähnliche Betriebssysteme), um solche Pakete zu versenden. |
AW: Wake on LAN
Delphi-Quellcode:
Ich habe den Code unverändert übernommen, Data enthält also 6 x FF und die Broadcastadresse aus dem Edit.
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdUDPBase, IdUDPClient; type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; IdUDPClient1: TIdUDPClient; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} { What's a Magic Packet? Was ist ein Magic Packet? DESTINATION SOURCE MISC. FF FF FF FF FF FF 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 MISC. CRC. Note: Destination, Source, Misc and CRC are normally added by our Socket-Component Beachte: Destination, Source, Mis und CRC werden normalerweise von deiner Socket-Komponente hinzugefügt } procedure TForm1.Button1Click(Sender: TObject); var Data, temp: string; k, n: integer; begin Data := ''; for k := 0 to 5 do begin Data := Data + Chr(StrToInt('$FF')); // 6x add a FF / 6x ein FF hinzufügen end; temp := StringReplace(Edit1.Text, '-', '', [rfReplaceAll]); for k := 0 to 15 do begin temp := StringReplace(Edit1.Text, '-', '', [rfReplaceAll]); for n := 0 to 5 do begin // 16x add Target-Mac-Adress / 16x die Ziel-Macadresse hinzufügen Data := Data + Chr(StrToInt('$' + temp[1] + temp[2])); Delete(temp, 1, 2); end; end; //Example with TIdUDPClient of Indy IdUDPClient1.Host:= '255.255.255.255'; IdUDPClient1.Port:= 80; IdUDPClient1.Send(Data); // Send it / Verschick es end; end. |
AW: Wake on LAN
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:12 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 by Thomas Breitkreuz