tag 标签: 网络端口

相关帖子
相关博文
  • 热度 19
    2014-9-11 17:54
    2487 次阅读|
    0 个评论
    译自:http://ricardo-dias.com/2010/11/20/arduino-wakes-my-pc/ 我一直梦想着通过网络控制我房间里的一些物件。在电脑上看IPTV,开/关灯,遥控P2P下载…完成这些,我需要一个服务器– 我的旧台式机倒是可以做到。当然,我不是故意晾着它 整天/周/月的…^^ 我需要在任何想要用的时候,找到复活它的办法。所以我想我可以用一个Arduino和以太网插板来发送 局域网唤醒包(来实现远程服务器开机)。   这个UdpRaw库可允许发送原始数据包,所以我要做的只是执行以下这个“魔法包(Magic Packet)” – 它由 6个0xFF及紧跟的16个目标MAC地址 组成。 byte wolMac ; int i,c1,j=0; for(i = 0; i 6; i++,j++){   all = 0xFF; } for(i = 0; i 16; i++){   for( c1 = 0; c1 6; c1++,j++)     all = wolMac ; } 运行这些代码之后,所有的这些阵列将获得完整的魔法包,预备发送: UdpRaw.sendPacket(all,102,targetIp,targetPort); 所以测试的话,我琢磨出了一个简单的程序,当按下一个按钮时,包就发送了。然后呢,我在pin 2上用了一个中断。Arduino基本能保持对那个引脚的侦听,无论从低到高,都将执行特定功能。     搞定上面之后,我计划用Arduino来侦听网络端口,当它接收到一个指定的包序列后,就唤醒电脑。这样就能在世界的任何有角落叫启动我的服务器了!      这是全部的Arduino 代码: /* * Arduino WakeMyPc  * Ricardo Dias  * http://ricardo-dias.com/  *  * This sketch sends the "magic packet" to wake up  * a PC on Local Area Network when a push-button  * is pressed.  */ #include Ethernet.h #include UdpRaw.h // ARDUINO CONFIG byte mac = { 192, 168, 1, 112 }; // Arduino IP byte gw = { 192, 168, 1, 255 }; int targetPort = 5456; byte wolMac ;   int i,c1,j=0;   for(i = 0; i 6; i++,j++){     all = 0xFF;   }   for(i = 0; i 16; i++){     for( c1 = 0; c1 6; c1++,j++)       all = wolMac ;   }   UdpRaw.sendPacket(all,102,targetIp,targetPort); } PS:你可能在想“见鬼为什么它不能直接把这些包发送到电脑上?” 可以这样解释:我的ISP喜欢在每天夜里2点重启路由器。那么路由器重启,服务器就down掉,它不知道服务器连着的是哪个以太网端口。为解决此问题,这些包需要发送到广播IP。然而,在局域网中才行。   与我们更多交流:wiznetbj@wiznet.co.kr 欢迎登陆WIZnet官方网站:http://www.iwiznet.cn
  • 热度 16
    2014-9-11 17:52
    1087 次阅读|
    0 个评论
    译自:http://ricardo-dias.com/2010/11/20/arduino-wakes-my-pc/ 我一直梦想着通过网络控制我房间里的一些物件。在电脑上看IPTV,开/关灯,遥控P2P下载…完成这些,我需要一个服务器– 我的旧台式机倒是可以做到。当然,我不是故意晾着它 整天/周/月的…^^ 我需要在任何想要用的时候,找到复活它的办法。所以我想我可以用一个Arduino和以太网插板来发送 局域网唤醒包(来实现远程服务器开机)。   这个UdpRaw库可允许发送原始数据包,所以我要做的只是执行以下这个“魔法包(Magic Packet)” – 它由 6个0xFF及紧跟的16个目标MAC地址 组成。 byte wolMac ; int i,c1,j=0; for(i = 0; i 6; i++,j++){   all = 0xFF; } for(i = 0; i 16; i++){   for( c1 = 0; c1 6; c1++,j++)     all = wolMac ; } 运行这些代码之后,所有的这些阵列将获得完整的魔法包,预备发送: UdpRaw.sendPacket(all,102,targetIp,targetPort); 所以测试的话,我琢磨出了一个简单的程序,当按下一个按钮时,包就发送了。然后呢,我在pin 2上用了一个中断。Arduino基本能保持对那个引脚的侦听,无论从低到高,都将执行特定功能。     搞定上面之后,我计划用Arduino来侦听网络端口,当它接收到一个指定的包序列后,就唤醒电脑。这样就能在世界的任何有角落叫启动我的服务器了!      这是全部的Arduino 代码: /* * Arduino WakeMyPc  * Ricardo Dias  * http://ricardo-dias.com/  *  * This sketch sends the "magic packet" to wake up  * a PC on Local Area Network when a push-button  * is pressed.  */ #include Ethernet.h #include UdpRaw.h // ARDUINO CONFIG byte mac = { 192, 168, 1, 112 }; // Arduino IP byte gw = { 192, 168, 1, 255 }; int targetPort = 5456; byte wolMac ;   int i,c1,j=0;   for(i = 0; i 6; i++,j++){     all = 0xFF;   }   for(i = 0; i 16; i++){     for( c1 = 0; c1 6; c1++,j++)       all = wolMac ;   }   UdpRaw.sendPacket(all,102,targetIp,targetPort); } PS:你可能在想“见鬼为什么它不能直接把这些包发送到电脑上?” 可以这样解释:我的ISP喜欢在每天夜里2点重启路由器。那么路由器重启,服务器就down掉,它不知道服务器连着的是哪个以太网端口。为解决此问题,这些包需要发送到广播IP。然而,在局域网中才行。   与我们更多交流:wiznetbj@wiznet.co.kr 欢迎登陆 WIZnet官方网站: http://www.iwiznet.cn WIZnet官方博客:http://blog.iwiznet.cn