![]() |
Re: Wake on LAN
Zitat:
|
Re: Wake on LAN
Zitat:
|
Re: Wake on LAN
Zitat:
![]() |
Re: Wake on LAN
Hallo,
für mich ist der Code der Schweizer so irgendwie gar nicht nachvollziehbar:
Delphi-Quellcode:
Zum einen wird der Variablen Temp zweimal das Selbe zugeordnet, was entweder einmal zuviel ist oder es soll anders heißen und zum zweiten können die Übergabeparameter für IdUDPClient1.Send so gar nicht stimmen, weil dort nur ein Parameter erwartet wird.
{
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.Send('255.255.255.255', '80', Data); // Send it / Verschick es end; So funzt es zumindest mit dem Beispiel(hier ausgeklammert) nicht... Gruß Gambit |
Re: Wake on LAN
Es gibt für Send mehrere Prozeduren.
Ich verwende übrigens folgenden Code:
Delphi-Quellcode:
Gruß,
var data, temp, mac: String;
k: Integer; begin mac := StringReplace(MacEdit.Text, '-', '', [rfReplaceAll]); temp := ''; for k := 0 to 5 do temp := temp + Chr(StrToInt('$' + Copy(mac, k * 2 + 1, 2))); for k := 0 to 3 do temp := temp + temp; Data := #255#255#255#255#255#255 + temp; UDPClient.Send('255.255.255.255', 80, Data); end; ManuMF |
Re: Wake on LAN
Zitat:
|
Re: Wake on LAN
Grobes Beispiel;
Delphi-Quellcode:
So nimmt es zumindest der Compiler an und es gibt keine Exceptions. Ob es wirklich funktioniert werde ich in ein paar Minuten sehen wenn ich meinen Rechner magisch erwachen lasse :) (Braucht aber noch etwas da der Nachbar scheinbar noch schläft lol)
var
UDPClient : TIdUDPClient; ... //UDPClient := TIdUDPClient.Create (nil); UDPClient.BroadcastEnabled := true; UDPClient.Host := '255.255.255.255'; UDPClient.Port := 2050; UDPClient.SendBuffer (Data, SizeOf (Data)); Data ist genau das was die Definition des ![]() |
Re: Wake on LAN
So, obiges Beispiel was ich gepostet hab funktioniert so nicht wirkich.
Der Teil mit dem Absenden funktioniert prächtig, sofern der Aufbau/Inhalt von Data richtig ist. Denn die Umsetzung der ![]()
Delphi-Quellcode:
Laut der Definition werden...
{
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 } 1. Destination, Source, Misc (?) und CRC (?) von der Komponte eingefügt. D.h. in dem Fall Indy. Ob das so ist...weiß ich nicht. 2. 6 mal die Hex-Zahl 0xFF (Dez 255) 3. 16 mal die Mac-Adresse im HexFormat Ob die Punkte eine Bedeutung haben? Ich denke mal nicht. Aber somit sollte es gehen? Tut es aber nicht, zumindest nicht bei mir. Schicken wir Data so ab kommen wir auf eine Gesamtlänge von 102. Sehen wir uns das Beispiel von ![]() Aber was? Es werden zusätzlich vor 6 mal 0xFF, also vor 2. 0x00 und 0x74 (Dez 116) eingefügt und nachträglich 0x00, 0x40, 0x90, 0x90, 0x00 und 0x40. Speicherauszug von Data wäre somit:
Delphi-Quellcode:
Die ersten 6 Bytes, die Ziel-MAC. Ist denk ich klar. Obwohl sie glaub ich optional sein kann. Anschließend Byte 00 und 74, scheint die Gesamtlänge des "Pakets" zu sein (16 Bit), also die 116. FF FF FF FF FF FF ist, so wie ich es weiß, der Code (Befehl) an die Netzwerkkarte den Rechner anzuschalten.
{
11 22 33 44 55 66 00 74 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 40 00 90 90 40 00 } Aber was ist der Rest? Misc scheint ja nun die Länge zu sein. Aber Misc am Ende? O.o Ok, mit Hilfe von Wiki lässt sich nun auch [wiki]CRC[/wiki] erklären und CRC ist demnach die 16-Bit große optionale Prüfsumme über den UDP-Kopf (bestehend aus dem Pseudo-Header der wiederrum aus Quell-IP, Ziel-IP, leer 8-Bitfeld, Protokoll-Typ (8 Bit, UDP = 17)) und die Länge des Pakets und zusätzlich aus den eigentlichen Daten besteht die aber im UDP-Header angesiedelt wird? Mh...ist mir noch nicht ganz einleuchtend wieso die nun am Ende steht obwohl sie im Kopf stehen müsste? (wenn es eine gibt...) Aber erstmal egal. Damit funktioniert es zumindest ersteinmal. Ich hätte nun noch eine andere Frage zum WakeOnLan. Das "MagicPaket" wird ja übers User Data Protocoll geschickt welches Verbindungslos ist. D.h. der Empfänger sendet keine Empfangsbesätigung an den Sender zurück sobald das Paket wirklich angekommen sind (wie es bei TCP als verbindungsorientiertes Protokoll ist). Somit weiß ich nicht ob das MagicPaket wirkich angekommen ist. Aber hab ich dennoch eine Möglichkeit schnell zu erfahren ob das Paket angekommen ist? Kann ich denn TCP fürs MagicPaket verwenden? Denn irgendwie, als ich WakeOnLan das erste mal testete wollte es manchmal gar nicht anspringen, obwohl ich mehrere Programme (auch fertige) verwendete. Erst als ich den Rechner öfter mit WakeOnLan hochfahren ließ versagte er seltener. Es ist also sehr unzuverlässig. Ich brauche aber dennoch eine sichere Möglichkeit den Rechner übers Netzwerk einzuschalten. Vielen Dank! Gruß, Robert |
Re: Wake on LAN
|
Re: Wake on LAN
Hallo,
das Problem ist folgendes: Die Schweizer verwenden für den Port einen String, aber ab Indy 10 ist es ein Integer! Gruß, ManuMF |
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