[刚才没说明白, 继续问]如何利用网卡唤醒远程计算机, 进行远程启动? 大家伸手相助!!! 现在有一些软件如: CMD 的Magic_pocket, lbmagic都可以实现, 但没有相关源码啊, 大家帮忙! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 要硬件支持的一般的协议是发送网卡的MAC地址和一堆FF到网卡 格式是重复6次的FF加上重复16次的MAC地址 // 定义MAC地址结构#ifndef tagMACtypedef struct tagMAC{ unsigned char MacByte[6];}MAC, * LPMAC;#endif// 远程开机数据包的格式// [ethernet header][IP header][UDP header][Magic sequence][CRCS]//// Magic Sequence 的格式://// FF FF FF FF FF FF (11 22 33 44 55 66) * 0x10BOOL WakeOnLAN(MAC mac) // 存放被喚醒端 MAC{ BYTE buf[102]; // 存放 magic package int i; // 建立 magic package 內容 // stage 1: 同步信号 for (i=0; i<6; i++) { buf[i] = 0xFF; } // stage 2: 被喚醒端 Mac 位址 for (i=1; i<17; i++) memcpy(&buf[i*sizeof(MAC)], &mac, sizeof(MAC)); SOCKET s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (s == INVALID_SOCKET) return FALSE; SOCKADDR_IN tar; ZeroMemory(&tar, sizeof(tar)); tar.sin_family = AF_INET; tar.sin_port =htons(80); tar.sin_addr.S_un.S_addr = INADDR_BROADCAST; BOOL bBroadcast = TRUE; setsockopt(s, SOL_SOCKET, SO_BROADCAST, (char *)&bBroadcast, sizeof(BOOL)); if (sendto(s, (const char *)buf, 102, 0, (sockaddr *)&tar, sizeof(tar)) == SOCKET_ERROR) { int i = WSAGetLastError(); //MessageBox(NULL, "Fuck", NULL, MB_OK); closesocket(s); return FALSE; } closesocket(s); return TRUE;} 网络唤醒是发送一种特殊的ethernet报文,到google搜索magic packet会有很多相关的。 求SOCKET编程资料,初级的,最好有示例 控制的成员变量问题,瓶颈问题 鼠标钩子效率问题,懂Hook的进来看看!!! 编译出错怎么改,高手指点 关于QueryInterface的一个问题,请指教 我刚才的问题呢? 路径转换问题 如何查找控件所在的位置? 如何得到盘符?C:,D:,E:??? Com问题,hr返回值总是0x8002801d 没有注册,高手们快来!! Vc中应用ADO数据库编程。 #import语句导入链接库时出现编译错误。请各位大师指点!!一定加分!! 怎样使check box的文字背景为透明?
一般的协议是发送网卡的MAC地址和一堆FF到网卡
#ifndef tagMAC
typedef struct tagMAC
{
unsigned char MacByte[6];
}MAC, * LPMAC;
#endif
// 远程开机数据包的格式
// [ethernet header][IP header][UDP header][Magic sequence][CRCS]
//
// Magic Sequence 的格式:
//
// FF FF FF FF FF FF (11 22 33 44 55 66) * 0x10
BOOL WakeOnLAN(MAC mac) // 存放被喚醒端 MAC
{
BYTE buf[102]; // 存放 magic package
int i; // 建立 magic package 內容
// stage 1: 同步信号
for (i=0; i<6; i++)
{
buf[i] = 0xFF;
} // stage 2: 被喚醒端 Mac 位址
for (i=1; i<17; i++)
memcpy(&buf[i*sizeof(MAC)], &mac, sizeof(MAC)); SOCKET s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (s == INVALID_SOCKET)
return FALSE;
SOCKADDR_IN tar;
ZeroMemory(&tar, sizeof(tar));
tar.sin_family = AF_INET;
tar.sin_port =htons(80);
tar.sin_addr.S_un.S_addr = INADDR_BROADCAST;
BOOL bBroadcast = TRUE;
setsockopt(s, SOL_SOCKET, SO_BROADCAST, (char *)&bBroadcast, sizeof(BOOL));
if (sendto(s, (const char *)buf, 102, 0, (sockaddr *)&tar, sizeof(tar)) == SOCKET_ERROR)
{
int i = WSAGetLastError();
//MessageBox(NULL, "Fuck", NULL, MB_OK);
closesocket(s);
return FALSE;
}
closesocket(s);
return TRUE;
}