拿具体例子来说:
环境:
    A机器的地址是192.168.2.72,B机器的地址是192.168.8.72,这2台机器都是Windows系统,并且在一个大的局域网里。最顶层是一个3层交换机。A,B机器之间正常通信没问题,所有协议都可以跑。
    A,B机器都支持通过网卡唤醒开机,并且都已经设置好,完全没问题。
我的需求:
    我要在A(192.168.2.72)机器上用Windows,Socket方式通过网卡唤醒B(192.168.8.72)机器,我知道是用UDP方式发一个广播包,但是这种情况下,这个广播包该如何写,是怎样个格式。补充:
    这个网里有防火墙,但是防火墙没对任何协议做任何限制。

解决方案 »

  1.   

    s.Create(40000,SOCK_DGRAM);
    BOOL bOptVal = TRUE;
    if (s.SetSockOpt(SO_BROADCAST,(char*)&bOptVal,sizeof(BOOL))==SOCKET_ERROR) 
    return;
    s.SendTo(magicP,MAGIC_PACKET_LENGTH,40000); s.Close();
    其中magicP包含的是你要唤醒的电脑的网卡
      

  2.   

    magicp如何写,我写开头6个FF后面跟16个MAC地址,如果是A,B机器是在同一网段就可以开机,但是跨网段就不行了,等待高手指点!!!
      

  3.   

    BYTE magicP[MAGIC_PACKET_LENGTH]; //Buffer for packet

    for (int i=0;i<6;i++)
    magicP[i] = 0xff; for (i=0;i<6;i++) {
    magicP[i+6] = HexStrToInt(macAddr.Mid(i*2,2));
    }

    for (i=0;i<15;i++)
    memcpy(&magicP[(i+2)*6],&magicP[6],6);跨网段访问:
    http://se7en.blog.51cto.com/826185/272777
      

  4.   

    s.Create(40000,SOCK_DGRAM);
    BOOL bOptVal = TRUE;
    if (s.SetSockOpt(SO_BROADCAST,(char*)&bOptVal,sizeof(BOOL))==SOCKET_ERROR)  
    return;
    s.SendTo(magicP,MAGIC_PACKET_LENGTH,40000);s.Close();
    其中magicP包含的是你要唤醒的电脑的网卡