捐赠 | 广告 | 注册 | 发布 | 上传 | 关于我们    
  沪ICP备05001939号 DELPHI盒子 | 盒子论坛 | 盒子文章 | 盒子问答悬赏 | 最新更新 | 论坛检索 | 下载中心 | 高级搜索    
  精品专区 | 繁體中文 | 奖励公告栏 | 直通车账号登陆 | 关闭GOOGLE广告 | 临时留言    
 
广告
评论:局域网远程开机的原理
loadymf 41469 2011/4/19 14:17:37
代码不错,不过有不能使用修改二个地方
一 修改下面的:
for i:=0 to 5 do vBuf:=char($FF);
改为:for i:=0 to 5 do vBuf[i]:=char($FF);
二在下面前面加入一句NMUDP1.RemotePort:=4608;
  NMUDP1.RemoteHost:='192.168.1.255';
  NMUDP1.SendBuffer(vBuf,Length(vBuf));
promiseclx 35000 2008/7/19 19:55:35
我想知道怎么回事,我写了一个程序,用 wep查看发的包完全一样但是却不可以远程开机!
etqxq 25934 2006/9/8 13:52:56
$80 是什么意思
wwdawyn 21330 2006/2/3 0:14:17
老兄们,我知道了远程开机的原理,能不能说说,远程关机的原理呀,就是网卡支持,远程开关机!能不能给大家说说!最好在代码!
gdsa 21309 2006/1/30 18:09:58
我用这段代码为何不管用,但用在别的地方下的代码在同样的机器上是可以的!!
代码如下(我不知如何贴附件):
unit WakeUp;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, WinSock,
  StdCtrls,Dialogs;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    function CheckWinSockResult(ResultCode: Integer; const FuncName: string): Integer;
  end;

 const 
     LEN_PHYSADDR = 6;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

function TForm1.CheckWinSockResult(ResultCode: Integer;
  const FuncName: string): Integer;
begin
  if ResultCode <> 0 then
     begin 
     Result := WSAGetLastError; 
     ShowMessage(Format(#13#10'Windows socket函数''%s''错误: %s (%d)',[FuncName,SysErrorMessage(Result), Result])); 
     Abort; 
     end else Result := 0;
end;

procedure TForm1.Button1Click(Sender: TObject);
var 
  WSAData: TWSAData;
  MSocket: TSocket;
  SockAddrIn: TSockAddrIn;
  RetVal, OptVal, i: Integer;
  MacAddr: array[0..5] of Byte;
  MagicData: array[0..101] of Byte;
  Position: Longint;
  SAddr:string;
begin
  SAddr:=edit1.Text;//网卡的MAC地址
  //00-0d-61-93-20-dc
  try
    if Length(SAddr) <> 17 then Abort;
    for i := 1 to Length(SAddr) do
      if i in [3, 6, 9, 12, 15] then
        if SAddr[i] <> '-' then Abort;
          for i := 0 to High(MacAddr) do
          begin
          if Pos('-', SAddr) > 0 then
          MacAddr[i] := StrToInt(HexDisplayPrefix + Copy(SAddr, 1, Pos('-', SAddr) - 1))
          else
          MacAddr[i] := StrToInt(HexDisplayPrefix + SAddr);
          Delete(SAddr, 1, Pos('-', SAddr));
          end;
      except
        ShowMessage(#13#10'网卡地址错误.');
        exit;
      end;
     try
      CheckWinSockResult(WSAStartup($0101, WSAData), 'WSAStartup');
      MSocket := socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
      if MSocket = INVALID_SOCKET then CheckWinSockResult(MSocket, 'socket');
      OptVal := 1;
     CheckWinSockResult(setsockopt(MSocket, SOL_SOCKET, SO_BROADCAST,
     PChar(@OptVal), SizeOf(OptVal)), 'setsockopt');
     FillChar(MagicData, SizeOf(MagicData), $FF); 
     Position := LEN_PHYSADDR;
     while Position < SizeOf(MagicData) do 
     begin 
     Move(MacAddr, Pointer(Longint(@MagicData) + Position)^, LEN_PHYSADDR);
     Inc(Position, LEN_PHYSADDR); 
     end; 
     SockAddrIn.sin_family := AF_INET; 
     SockAddrIn.sin_addr.S_addr := Longint(INADDR_BROADCAST); 
     RetVal := sendto(MSocket, MagicData, SizeOf(MagicData), 0, SockAddrIn, SizeOf(SockAddrIn)); 
     if RetVal = SOCKET_ERROR then CheckWinSockResult(RetVal, 'sendto'); 
     CheckWinSockResult(closesocket(MSocket), 'closesocket'); 
     CheckWinSockResult(WSACleanup, 'WSACleanup'); 
     except 
     exit; 
     end;
end;

end.
gdsa 21308 2006/1/30 17:42:35
NMUDP1是什么控件
bianfuxia888888 21298 2006/1/29 10:32:07
vBuf[j]  :=Char($00);
    vBuf[j+1]:=Char($13);
    vBuf[j+2]:=Char($D4);
    vBuf[j+3]:=Char($04);
    vBuf[j+4]:=Char($55);
    vBuf[j+5]:=Char($80);

是mac地址吗,如果是如何得到它呀
bianfuxia888888 21297 2006/1/29 10:31:31
不错呀,好东西
cjrb 21296 2006/1/29 8:58:30
也在指定Mac地址,你改成自己的没有,IP是任意的,随便都可以 
    vBuf[j]  :=Char($00);
    vBuf[j+1]:=Char($13);
    vBuf[j+2]:=Char($D4);
    vBuf[j+3]:=Char($04);
    vBuf[j+4]:=Char($55);
    vBuf[j+5]:=Char($80);
zhihe 21294 2006/1/29 2:57:02
怎么开不起。我用别的软件都能开的机器,用你的代码确不能开机.可以详细说明不?并且别人的代码发到的IP是255.255.255.255也就是广播消息。只是指定了MAC码而已
zyb0565 21288 2006/1/29 0:52:07
恩  不错的好东西

不过代码看不懂耶   这方面没什么了解

新年快乐!
第一页 上一页 下一页 最后页 有 11 条纪录 共1页 1 - 11
 用户名:
 密 码:
自动登陆(30天有效)
 
  DELPHI盒子版权所有 1999-2023 V4.01 粤ICP备10103342号-1 更新RSS列表