WinSock을 이용한 WOL(Wake On Lan) 구현
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes,
Graphics, Controls, Forms, Dialogs, StdCtrls, WinSock;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
i, mod_i, mSocket, optval: Integer;
s: string;
sSocket: TSockAddrIn;
Target: array[0..5] of Byte;
MagicPacket: array[0..101]of Byte;
begin
// 공백을 제거하여 문자열변수에 넣는다.
s := Trim(Edit1.Text);
// 소켓을 mSocket에 설치한다
mSocket := socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
// 소켓 옵션을 설정한다
optval := 1;
setsockopt(mSocket, SOL_SOCKET, SO_BROADCAST, @optval, SizeOf(optval));
// Broard Cast 주소를 소켓에 설정
sSocket.sin_family := AF_INET;
sSocket.sin_addr.S_addr := htonl($FFFFFFFF);
sSocket.sin_port := htons(60000);
// Magic Packet 생성
// MagicPacket[0..5] 에게 $FF Broard Cast 주소를 넣는다
for I := 0 to 5 do
begin
MagicPacket[i] := $FF;
end;
// Target 배열에 Mac 주소를 넣는다
for I := 0 to 5 do
begin
Target[i] := StrToInt('$' + Copy(s, 1, 2));
delete(s, 1, 3);
end;
// Mac 주소에 Target을 16번 반복해서 넣는다
for I := 6 to 101 do
begin
mod_i := i mod 6;
MagicPacket[i] := Target[mod_i];
end;
memo1.Lines.Add(IntToStr(SizeOf(MagicPacket)));
for I := 0 to SizeOf(MagicPacket) -1 do
begin
memo1.Lines.Add('MagicPacket[' + inttostr(i) + '] -> ' + Format('%.2x', [MagicPacket[i]]));
end;
// 패킷을 보낸다
sendto(mSocket, MagicPacket[0], SizeOf(MagicPacket), 0, sSocket, SizeOf(sSocket));
closesocket(mSocket); Memo1.Lines.Add('Magic Packet을 발송했습니다.');
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
// 윈속 종료
WSACleanup;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
WSAData: TWSAData;
begin
// 윈속 시작
WSAStartup($101, WSAData);
end;
end.
'Delphi Tip > 통신' 카테고리의 다른 글
델파이 기본 소켓의 사용 (0) | 2024.01.02 |
---|---|
델파이 RS232 통신 (0) | 2023.11.03 |
델파이 소켓(통신) 프로그램 (0) | 2023.10.23 |
소켓 프로그래밍 기법의 활용 6편 마무리 (0) | 2021.12.27 |
소켓 프로그래밍 기법의 활용 5편 (0) | 2021.12.26 |
댓글