AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Magic Packet richtig zusammenstellen
Thema durchsuchen
Ansicht
Themen-Optionen

Magic Packet richtig zusammenstellen

Ein Thema von stev-e87 · begonnen am 23. Mai 2009 · letzter Beitrag vom 24. Mai 2009
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#11

Re: Magic Packet richtig zusammenstellen

  Alt 23. Mai 2009, 17:32
Wie ist denn die Send-Methode deklariert? Etwa so:
procedure Send(const buffer); Dann muss man so senden:
Send(Data[1]); // man beachte das [1]
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#12

Re: Magic Packet richtig zusammenstellen

  Alt 23. Mai 2009, 17:36
Ich schätze es ist wirklich als Send(const S: String) deklariert. (const Buffer) wäre ohne Längenparameter etwas kritisch..
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#13

Re: Magic Packet richtig zusammenstellen

  Alt 23. Mai 2009, 17:39
Zitat von Neutral General:
Ich schätze es ist wirklich als Send(const S: String) deklariert. (const Buffer) wäre ohne Längenparameter etwas kritisch..
Stimmt.
  Mit Zitat antworten Zitat
stev-e87

Registriert seit: 28. Feb 2009
20 Beiträge
 
#14

Re: Magic Packet richtig zusammenstellen

  Alt 23. Mai 2009, 17:56
So, hab vor lauter Unverständnis noch mal die Delphi 6 IDE zum Laufen gebracht und was soll ich sagen, damit funktioniert es!
Kanns quasi nur noch an der Indy Komonente liegen oder arbeitet Delphi 2009 in Hinsicht auf das Problem anders? Denke doch nicht.

PS.: Die Deklaration ist Const AData:String
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#15

Re: Magic Packet richtig zusammenstellen

  Alt 23. Mai 2009, 17:59
String D6 = AnsiString
String D2009 = UnicodeString

Char D6 = AnsiChar ( 8Bit)
Char D2009 = WideChar ( 16Bit)
Markus Kinzler
  Mit Zitat antworten Zitat
stev-e87

Registriert seit: 28. Feb 2009
20 Beiträge
 
#16

Re: Magic Packet richtig zusammenstellen

  Alt 23. Mai 2009, 19:06
Hab data im Deklarationsteil mal als AnsiString vorgegeben, das Ergebnis bleibt...
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#17

Re: Magic Packet richtig zusammenstellen

  Alt 23. Mai 2009, 19:32
Das kann auch nichts ändern, wenn Indy mit Unicode arbeitet. Man sollte eben binäre Daten nicht als String senden.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
paritycheck

Registriert seit: 8. Feb 2005
51 Beiträge
 
Delphi 2009 Professional
 
#18

Re: Magic Packet richtig zusammenstellen

  Alt 23. Mai 2009, 20:35
Hi,
hab zwar kein Delphi 2009 zum testen aber vielleicht funktioniert folgender Code:

Delphi-Quellcode:
uses winsock;
....
function WakeOnLan(szMac: String): Boolean;
var
  sock : TSocket;
  addr : TSockAddrIn;
  WSA : TWSAData;
  buf : array[0..101] of byte;
  HWAddr : array[0..5] of byte;
  bTrue : Boolean;
  P : PChar;
  I : Integer;
  Code : Integer;
  szTmp : String;
  dwRet : Cardinal;
  Seperatorcount: Integer;
begin
  bTrue:= True;
  Result:= False;

  Seperatorcount:= 0;
  if (length(szMac) <> 17) and (length(szMac) <> 12) then Exit;
  for I:= 1 to length(szMac) do begin
      if not (szMac[I] in ['A'..'F','0'..'9','a'..'f', '-', ':']) then Exit;
      if (szMac[i] in ['-', ':']) then begin
         inc(Seperatorcount);
         if Seperatorcount > 5 then Exit;
      end;
  end;

  szTmp:= szMac;
  repeat
    I:= pos('-', szTmp);
    if I > 0 then Delete(szTmp, I, 1);
  until
    I <= 0;
  repeat
    I:= pos(':', szTmp);
    if I > 0 then Delete(szTmp, I, 1);
  until
    I <= 0;

  FillChar(buf, 6, $FF);
  P:= PChar(szTmp);
  for I:= 0 to 5 do begin
      val('$'+P^+(P+1)^, HWAddr[i], Code);
      inc(P,2);
  end;
  for I:= 0 to 15 do
      move(HWAddr, buf[6+(i*6)], 6);

  dwRet:= WSAStartup((2 shl 8)+1, WSA);
  if dwRet = 0 then begin
     sock:= socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
     if sock <> INVALID_SOCKET then begin
        if setsockopt(sock, SOL_SOCKET, SO_BROADCAST, pchar(@bTrue), sizeof(bTrue)) = 0 then begin
           FillChar(addr, sizeof(addr), 0);
           addr.sin_family:= AF_INET;
           addr.sin_addr.s_addr:= INADDR_BROADCAST;
           addr.sin_port:= htons(60000);
           dwRet:= sendto(sock, buf, sizeof(buf), 0, addr, sizeof(addr));
           Result:= (dwRet=sizeof(buf));
        end;
     end;
     WSACleanup;
  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#19

Re: Magic Packet richtig zusammenstellen

  Alt 23. Mai 2009, 21:25
[durchstreich]Data := #$00FF#$00FF#$00FF#$00FF#$00FF#$00FF [/durchstreich]
edit: Blödsinn

Problem: siehe http://www.delphipraxis.net/internal...t.php?t=153308


Delphi-Quellcode:
var a: AnsiString;
  s: String;
begin
s := #$FF#$FF#$FF#$FF#$FF#$FF;
a := s;
if ord(s[1]) = ord(a[1]) then ;
Beides 255


welchen Zeichensatz/Kodierung verwendeten denn Indy?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
stev-e87

Registriert seit: 28. Feb 2009
20 Beiträge
 
#20

Re: Magic Packet richtig zusammenstellen

  Alt 24. Mai 2009, 07:01
Zitat von paritycheck:
Hi,
hab zwar kein Delphi 2009 zum testen aber vielleicht funktioniert folgender Code:

Delphi-Quellcode:
uses winsock;
....
function WakeOnLan(szMac: String): Boolean;
var
  sock : TSocket;
  addr : TSockAddrIn;
  WSA : TWSAData;
  buf : array[0..101] of byte;
  HWAddr : array[0..5] of byte;
  bTrue : Boolean;
  P : PChar;
  I : Integer;
  Code : Integer;
  szTmp : String;
  dwRet : Cardinal;
  Seperatorcount: Integer;
begin
  bTrue:= True;
  Result:= False;

  Seperatorcount:= 0;
  if (length(szMac) <> 17) and (length(szMac) <> 12) then Exit;
  for I:= 1 to length(szMac) do begin
      if not (szMac[I] in ['A'..'F','0'..'9','a'..'f', '-', ':']) then Exit;
      if (szMac[i] in ['-', ':']) then begin
         inc(Seperatorcount);
         if Seperatorcount > 5 then Exit;
      end;
  end;

  szTmp:= szMac;
  repeat
    I:= pos('-', szTmp);
    if I > 0 then Delete(szTmp, I, 1);
  until
    I <= 0;
  repeat
    I:= pos(':', szTmp);
    if I > 0 then Delete(szTmp, I, 1);
  until
    I <= 0;

  FillChar(buf, 6, $FF);
  P:= PChar(szTmp);
  for I:= 0 to 5 do begin
      val('$'+P^+(P+1)^, HWAddr[i], Code);
      inc(P,2);
  end;
  for I:= 0 to 15 do
      move(HWAddr, buf[6+(i*6)], 6);

  dwRet:= WSAStartup((2 shl 8)+1, WSA);
  if dwRet = 0 then begin
     sock:= socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
     if sock <> INVALID_SOCKET then begin
        if setsockopt(sock, SOL_SOCKET, SO_BROADCAST, p[color=#ff0000]ansi[/color]char(@bTrue), sizeof(bTrue)) = 0 then begin
           FillChar(addr, sizeof(addr), 0);
           addr.sin_family:= AF_INET;
           addr.sin_addr.s_addr:= INADDR_BROADCAST;
           addr.sin_port:= htons(60000);
           dwRet:= sendto(sock, buf, sizeof(buf), 0, addr, sizeof(addr));
           Result:= (dwRet=sizeof(buf));
        end;
     end;
     WSACleanup;
  end;
end;
Guten morgen...

Danke vielmals für die Bemühungen, mit obiger rot markierter Änderung hat es funktioniert
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 10:50 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