AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Wake on LAN

Ein Thema von Evian · begonnen am 5. Sep 2003 · letzter Beitrag vom 21. Apr 2011
Antwort Antwort
Seite 3 von 4     123 4      
Puhbaehr
(Gast)

n/a Beiträge
 
#21

Re: Wake on LAN

  Alt 20. Nov 2005, 22:17
Zitat von Daniel B:
http://www.delphipraxis.net/internal_redirect.php?t=17592&highlight=wake
Wolltest du mir jetzt zeigen, dass die DP bereits auch diesen Codeschnippsel enthält? *g*

Zitat von ManuMF:
...Die Schweizer verwenden für den Port einen String, aber ab Indy 10 ist es ein Integer!
Öhm...ich hätte fast das Wort "Port" überlesen, ich dachte erst du meinst "Data", also die MagicPaket-Daten.

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!

Vielen Dank soweit an alle!

Gruß, Robert
  Mit Zitat antworten Zitat
Gambit

Registriert seit: 28. Mai 2003
680 Beiträge
 
Delphi 7 Professional
 
#22

Re: Wake on LAN

  Alt 21. Nov 2005, 00:07
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
  Mit Zitat antworten Zitat
Puhbaehr
(Gast)

n/a Beiträge
 
#23

Re: Wake on LAN

  Alt 21. Nov 2005, 00:49
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?

Gruß, Robert
  Mit Zitat antworten Zitat
Benutzerbild von seim
seim

Registriert seit: 11. Nov 2007
83 Beiträge
 
#24

Re: Wake on LAN

  Alt 1. Okt 2008, 11:09
Ich hab das nochmal durchgeguckt und bin zu folgendem funktionierenden Code gekommen:

Delphi-Quellcode:
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.
Hier die .dfm (also alles was quasi in der Fensteransicht eingestellt wurde)
Delphi-Quellcode:
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
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.
Angehängte Dateien
Dateityp: zip wol_288.zip (274,0 KB, 52x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Codewalker
Codewalker

Registriert seit: 18. Nov 2005
Ort: Ratingen
945 Beiträge
 
Delphi XE2 Professional
 
#25

Re: Wake on LAN

  Alt 1. Okt 2008, 12:06
Zitat von seim:
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.
Außerdem muss der Rechner ordnungsgemäßg runtergefahren werden und danach dauerhaft am Strom hängen. Einmal Stecker raus und wieder rein --> kein Wake-on-LAN mehr.

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
Mit ein wenig basteln, ist das aber bei (fast) jedem Router hinzukriegen
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von seim
seim

Registriert seit: 11. Nov 2007
83 Beiträge
 
#26

Re: Wake on LAN

  Alt 21. Okt 2008, 19:39
Zitat von Codewalker:
endet an der nächsten Kollisionsdomäne - in diesem Falle der Router
Eine Kollisionsdomäne ist das Netzwerk mit einem Hub..
  Mit Zitat antworten Zitat
Osmodia666

Registriert seit: 19. Apr 2011
5 Beiträge
 
#27

AW: Wake on LAN

  Alt 21. Apr 2011, 00:01
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:
IdUDPClient1.Host:= Edit1.Text; bzw. IdUDPClient1.Host:= '192.168.0.255';
  IdUDPClient1.Port:= 80;
  IdUDPClient1.Send(Data); // Send it / Verschick es
end;
identisch.

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.
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#28

AW: Wake on LAN

  Alt 21. Apr 2011, 07:30
Was enthält "Data"?

Magic Packet

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.
  Mit Zitat antworten Zitat
Osmodia666

Registriert seit: 19. Apr 2011
5 Beiträge
 
#29

AW: Wake on LAN

  Alt 21. Apr 2011, 08:23
Delphi-Quellcode:
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.
Ich habe den Code unverändert übernommen, Data enthält also 6 x FF und die Broadcastadresse aus dem Edit.
  Mit Zitat antworten Zitat
Benutzerbild von pustekuchen
pustekuchen

Registriert seit: 27. Aug 2010
265 Beiträge
 
Delphi 11 Alexandria
 
#30

AW: Wake on LAN

  Alt 21. Apr 2011, 08:46
Ich habe den Code unverändert übernommen, Data enthält also 6 x FF und die Broadcastadresse aus dem Edit.
Muss dort nicht die MAC-Adresse ins Edit?
Delphi programming is awesome.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


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 08:22 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