POPPUR爱换

 找回密码
 注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

搜索
查看: 15490|回复: 32
打印 上一主题 下一主题

网络唤醒在NAS中的应用

[复制链接]
跳转到指定楼层
1#
发表于 2011-6-16 21:10 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
NAS的最终应用是代替本地硬盘,前提条件是有千兆有线网络,这个条件对于这个版块的常客来说并不苛刻。

在千兆有线网络应用中,DIY的台式机NAS性能相对较强,唯一常被诟病的是功耗问题。

对于纯NAS(不用做下载)的应用,NAS 24小时开机能随时使用NAS资源,用的比较爽。

NAS 24小时开机对于我而言,太费电,同时硬盘通电时间太长会影响今后的出售,我的解决方案是睡眠+网络唤醒。

这样能做到和NAS 24小时开机相同的效果,而且NAS从睡眠中唤醒最多5-10秒就可以了。

1、编写个网络唤醒软件
2、将这个软件在win7的计划任务中设置为登陆启动。
3、NAS中设置20分钟睡眠。
这样家里任何一台电脑启动都会启动NAS,应用中会让NAS变成本地硬盘一样使用方便。

程序自己参考了网上资源自己做了一个(VB)
下面是源程序:

'下面是源程序
Option Explicit
' 结构体变量声明
Private Type sockaddr
    sin_family As Integer
    sin_port As Integer
    sin_addr As Long
    sin_zero As String * 8
End Type
Private Type WSADataType
    wVersion As Integer
    wHighVersion As Integer
    szDescription As String * 257
    szSystemStatus As String * 129
    iMaxSockets As Integer
    iMaxUdpDg As Integer
    lpVendorInfo As Long
End Type
' TCP选项
Private Const AF_INET = 2                   'TCP、UDP协议
' 连接类型
Private Const SOCK_DGRAM = 2                ' 数据报式socket
' 地址常量
Private Const INADDR_ANY = &H0
Private Const SOL_SOCKET = &HFFFF&
Private Const INVALID_SOCKET = -1
Private Const SOCKET_ERROR = -1
' 协议类型
Private Const IPPROTO_UDP = 17              ' 用户数据报协议
' 选项标志
Private Const SO_BROADCAST = &H20           ' 允许发送广播信息
' 其他
Private Const BUF_LEN = 102                 ' 缓冲区大小
' API函数声明
Private Declare Function socket Lib "ws2_32.DLL" (ByVal af As Long, ByVal s_type As Long, ByVal protocol As Long) As Long  '创建一个通讯端点并返回一个套接口
Private Declare Function WSAStartup Lib "ws2_32.DLL" (ByVal wVR As Long, lpWSAD As WSADataType) As Long
Private Declare Function WSACleanup Lib "ws2_32.DLL" () As Long
Private Declare Function closesocket Lib "ws2_32.DLL" (ByVal s As Long) As Long
Private Declare Function setsockopt Lib "ws2_32.DLL" (ByVal s As Long, ByVal level As Long, ByVal optname As Long, optval As Long, ByVal optlen As Long) As Long
Private Declare Function sendto Lib "ws2_32.DLL" (ByVal s As Long, Buf As Any, ByVal buflen As Long, ByVal flags As Long, to_addr As Any, ByVal tolen As Long) As Long
Private Function WakeRemoteComputer(MacAddress() As Byte) As Boolean
    Dim msg_sock As Long
    Dim remote_addr As sockaddr
    Dim dwYes As Long
    Dim SendData(0 To BUF_LEN - 1) As Byte, i As Integer
    Dim wVersionRequested As Long       ' 版本
    Dim WSAData As WSADataType
    WakeRemoteComputer = False
    wVersionRequested = &H202
    If WSAStartup(wVersionRequested, WSAData) = 0 Then
   
        '获得winsock句柄
        msg_sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)
   
        If msg_sock <> INVALID_SOCKET Then
        
            ' 允许进行广播
            dwYes = 1
            If setsockopt(msg_sock, SOL_SOCKET, SO_BROADCAST, dwYes, Len(dwYes)) <> SOCKET_ERROR Then
        
                ' 准备发送数据
                For i = 0 To BUF_LEN - 1
                    SendData(i) = IIf(i < 6, &HFF, MacAddress(i Mod 6))
                Next i
               
                ' 准备发送地址
                remote_addr.sin_family = AF_INET
                remote_addr.sin_port = 0
                remote_addr.sin_addr = &HFFFFFFFF   ' 广播地址255.255.255.255
            
                ' 发送UDP数据到远程计算机
                If sendto(msg_sock, SendData(0), BUF_LEN, 0, remote_addr, Len(remote_addr)) <> SOCKET_ERROR Then
                    WakeRemoteComputer = True
                End If
            End If
            closesocket msg_sock
        End If
    End If
    WSACleanup
End Function

Sub main()
        Dim MacAddress(0 To 5) As Byte, i As Integer
'MacAddress 中放置NAS的MAC的6位地址
        MacAddress(0) = Val("&H" & "F4")
        MacAddress(1) = Val("&H" & "6D")
        MacAddress(2) = Val("&H" & "04")
        MacAddress(3) = Val("&H" & "D9")
        MacAddress(4) = Val("&H" & "F9")
        MacAddress(5) = Val("&H" & "FE")
    If WakeRemoteComputer(MacAddress()) Then
'        MsgBox "唤醒包发送完成。   "
    Else
        MsgBox "不能发送唤醒包。   "
    End If
End Sub
33#
发表于 2012-2-11 18:06 | 只看该作者
这么复杂, ~~  DDWRT 支持 WOL的 ,
回复 支持 反对

使用道具 举报

32#
发表于 2012-1-29 21:48 | 只看该作者
这样省不了多少电,还不方便。
nas最耗电的是硬盘,这个系统都可以自动让硬盘停转,这时候功耗就很小了。
现在电脑待机功耗是很小的。

千兆网络足够用了,用质量好的超六类网线,速度可以稳定在90-95MB/s。一般硬盘的平均速度也就这样了。
回复 支持 反对

使用道具 举报

31#
发表于 2012-1-29 18:38 来自手机 | 只看该作者
Intel网卡驱动设置下就好了。不需要这么麻烦。
回复 支持 反对

使用道具 举报

30#
发表于 2012-1-29 13:33 | 只看该作者
Player99 发表于 2011-12-24 14:00
这是实际的问题。从当今硬盘价格趋势(预计会很快回归洪水前价格)来看,以USB3快速普及为基础,对于多 ...

高清资料不能每台机器上都来一份,而且1T的硬盘对于高清来说,不是什么大硬盘。
回复 支持 反对

使用道具 举报

29#
发表于 2012-1-28 23:34 | 只看该作者
很好的讨论帖子啊
回复 支持 反对

使用道具 举报

28#
发表于 2011-12-27 08:36 | 只看该作者
当我准备搞NAS时,硬盘涨价了
回复 支持 反对

使用道具 举报

27#
发表于 2011-12-25 09:29 | 只看该作者
mark。。。很好的讨论帖子啊
回复 支持 反对

使用道具 举报

26#
发表于 2011-12-24 22:09 | 只看该作者
自己NAS的性能是很好的,睡眠能很好的解决不用时功耗的问题。

学习,留印。
回复 支持 反对

使用道具 举报

25#
发表于 2011-12-24 14:00 | 只看该作者
本帖最后由 Player99 于 2011-12-24 14:01 编辑
aliguagua 发表于 2011-6-16 21:20
真正想替代本地硬盘还是需要万兆或者intel的雷霆才行
而且nas最好能跟普通硬盘一样只用几瓦的电就好啦


这是实际的问题。从当今硬盘价格趋势(预计会很快回归洪水前价格)来看,以USB3快速普及为基础,对于多数用户来说,搞NAS不如每个机器都装上1TB或更大的硬盘。
回复 支持 反对

使用道具 举报

papagogo 该用户已被删除
24#
发表于 2011-9-17 13:27 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

23#
发表于 2011-9-16 23:32 | 只看该作者
{lol:]mark学习
回复 支持 反对

使用道具 举报

kevin_sk 该用户已被删除
22#
发表于 2011-9-16 19:04 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

21#
发表于 2011-9-9 19:07 | 只看该作者
学习了,顶一下。
回复 支持 反对

使用道具 举报

20#
发表于 2011-9-4 16:42 | 只看该作者
技术贴,要学习的
回复 支持 反对

使用道具 举报

celeron370 该用户已被删除
19#
发表于 2011-9-1 22:27 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

0808008 该用户已被删除
18#
发表于 2011-8-31 10:51 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

17#
发表于 2011-8-29 16:09 | 只看该作者
应用才是关键,顶楼主!!
硬件那些只是表面,硬件怎么搞,最终还是要回到应用上来!
回复 支持 反对

使用道具 举报

16#
 楼主| 发表于 2011-8-27 18:28 | 只看该作者
bill_max 发表于 2011-8-27 08:53
能不能实现手机、高清机开机也触发nas的启动?

安卓系统查了一下,好像有软件支持网络唤醒
http://www.androidonline.net/soft/show.asp?id=426
回复 支持 反对

使用道具 举报

15#
 楼主| 发表于 2011-8-27 18:25 | 只看该作者
IPHONE4 有一个软件Splashtop,里面有网络唤醒功能。
安卓的系统没有用过,不知道。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

广告投放或合作|网站地图|处罚通告|

GMT+8, 2025-7-27 23:51

Powered by Discuz! X3.4

© 2001-2017 POPPUR.

快速回复 返回顶部 返回列表