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
Definition der Schweizer haut irgendwie nicht hin:
Delphi-Quellcode:
{
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
}
Laut der Definition werden...
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
Sysworksoft.net an, fällt sofort auf, dass Data hier eine größe von 116 Byte hat. Also fehlt bei den Schweizern irgendwas.
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:
{
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
}
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.
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