Wake On Lan Nasıl Yapılır ?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
djmavi
Üye
Mesajlar: 2
Kayıt: 11 May 2009 11:19

Wake On Lan Nasıl Yapılır ?

Mesaj gönderen djmavi »

Konu ile araştırma yaptım ancak copy/paste sourcelerden ileri gidemedim. Normalde serverim var ve uzakmasaüstü servere açık ancak bazen servis bilgisayarıma ulaşmam gerekiyor. Makinanında devamlı çalışması sıkıntılı. Delphi ile küçük bir exe oluşturup bilgisayarımı serverden çalıştırıp server üzerinden modem ayarlarını değiştirdikten sonra uzak masaüstünü servis bilgisayarıma yönlendirmek istiyorum. Orta düzeyde delphi bilgim var. :D Başlangıçta denebilir üstadların yanında ;)

Soru ? Basit şekilde wake on lan uygulamasını nasıl yapabilirim ?
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: Wake On Lan Nasıl Yapılır ?

Mesaj gönderen vkamadan »

Merhaba,
forumda epeyce konuşmuştuki,
viewtopic.php?f=13&t=19345&hilit=WakeOnLan
Kolay gelsin.
Volkan KAMADAN
www.polisoft.com.tr
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: Wake On Lan Nasıl Yapılır ?

Mesaj gönderen mkysoft »

Wakeonlan çalışabilmesi için bilgisyarın düzgünce açılması ve kapanması gerekiyor. Bekleme süresinde elektrik giderse bir daha uyanmıyor. İş yerinizde eminim telefon santrali vardır. Telefon santralleri içerisinde çıkış bulundurur. Bu çıkışın bir numarası vardır (111 gibi). bu numarayı aradığınızda röle açılarak 5 volt verilir çıkışa. bu voltajı kullanarak bilgisayarı açtırabilirsiniz. Ben cep telefonlu sistemle uğraşmıştım bir ara. En sağlamı bu şekildeki donanımsal yapılar ile oluyor.
djmavi
Üye
Mesajlar: 2
Kayıt: 11 May 2009 11:19

Re: Wake On Lan Nasıl Yapılır ?

Mesaj gönderen djmavi »

hocam ilginiz için teşekkürler topici inceliycem. Santral işi işletmemde kullanabileceğim birşey değil şu an için en azından şirketimin santralınde arayacagım iç hat özeliği yok . Ama 3 aramadan sonra iç hattaki bir telefona yonlendırebılırsem dediğiniz gayet mantıklı denemekte fayda var.
Kullanıcı avatarı
csunguray
Üye
Mesajlar: 855
Kayıt: 09 Ara 2006 05:08
Konum: Adana
İletişim:

Re: Wake On Lan Nasıl Yapılır ?

Mesaj gönderen csunguray »

Kod: Tümünü seç

{
What's a 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
}

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;
C. Sunguray
csunguray at netbilisim.kom
Net Bilişim Hizmetleri

Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.
Martin Fowler (http://martinfowler.com/)
Kullanıcı avatarı
csunguray
Üye
Mesajlar: 855
Kayıt: 09 Ara 2006 05:08
Konum: Adana
İletişim:

Re: Wake On Lan Nasıl Yapılır ?

Mesaj gönderen csunguray »

Başka bir kod daha. Daha uzun ama daha anlaşılır.

Kod: Tümünü seç

uses
  WinTypes, Messages, SysUtils, Classes, IdBaseComponent, 
  IdComponent, IdUDPBase, IdUDPClient; 


Function HexToInt(S:String): LongInt;
const
  DecDigits: Set Of '0'..'9' = ['0'..'9'];
  HexVals: Array [0..$F] Of Integer = (0, 1, 2, 3, 4, 5, 6, 7, 
     8, 9, $A, $B, $C, $D, $E, $F);
  UpCaseHexLetters: Set Of 'A'..'F' = ['A'..'F'];
  LowCaseHexLetters: Set Of 'a'..'f' = ['a'..'f'];
var
  v: LongInt;
  i: integer;
  LookUpIndex: integer;
begin
  if length(S) <= 8 then begin
    v := 0;
    for i := 1 to length(S) do begin
       {$R-}
         v := v Shl 4;
       {$R+}
       if S[i] in DecDigits then begin
          LookUpIndex := Ord(S[i]) - Ord('0');
       end
       else begin
          if S[i] in UpCaseHexLetters then begin
             LookUpIndex := Ord(S[i]) - Ord('A') + $A;
          end
          else begin
             if S[i] in LowCaseHexLetters then begin
                LookUpIndex := Ord(S[i]) - Ord('a') + $A;
             end
             else begin
                LookUpIndex := 0;
             end;
          end;
       end;
       v := v Or HexVals[LookUpIndex];
    end;
    result := v;
  end
  else begin
    result := 0;
  end;
end;

procedure WakeUPComputer(aMacAddress: string);
var
  i, j: Byte;
  lBuffer: array[1..116] of Byte;
  lUDPClient: TIUDPClient;
begin
  try
    for i := 1 to 6 do begin
      lBuffer[i] := HexToInt(aMacAddress[(i * 2) - 1] + 
         aMacAddress[i * 2]);
    end;
    lBuffer[7] := $00;
    lBuffer[8] := $74;
    lBuffer[9] := $FF;
    lBuffer[10] := $FF;
    lBuffer[11] := $FF;
    lBuffer[12] := $FF;
    lBuffer[13] := $FF;
    lBuffer[14] := $FF;
    for j := 1 to 16 do begin
      for i := 1 to 6 do begin
        lBuffer[15 + (j - 1) * 6 + (i - 1)] := lBuffer[i];
      end;
    end;
    lBuffer[116] := $00;
    lBuffer[115] := $40;
    lBuffer[114] := $90;
    lBuffer[113] := $90;
    lBuffer[112] := $00;
    lBuffer[111] := $40;
    try
      lUDPClient := TIdUDPClient.Create(nil);
      lUDPClient.BroadcastEnabled := true;
      lUDPClient.Host := '255.255.255.255';
      lUDPClient.Port := 2050;
      lUDPClient.SendBuffer(lBuffer, 116);
      writeln('Trying to wake-up remote host: ' + aMacAddress);
    finally
      lUDPClient.Free;
    end;
  except
   on E: Exception do writeln('There was an error');
  end;
end;

C. Sunguray
csunguray at netbilisim.kom
Net Bilişim Hizmetleri

Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.
Martin Fowler (http://martinfowler.com/)
Cevapla