局域网内学生个人网络盘的设计和实现.docx
《局域网内学生个人网络盘的设计和实现.docx》由会员分享,可在线阅读,更多相关《局域网内学生个人网络盘的设计和实现.docx(13页珍藏版)》请在冰豆网上搜索。
局域网内学生个人网络盘的设计和实现
局域网内学生个人“网络盘”的设计和实现
广东省佛山市南海区罗村高中卢飞业(528226)
[摘要]讨论了制作学生个人“网络盘”的必要性,介绍了运用API函数在局域网内批量创建和管理网络盘的设计思路,并给出在VB6中实现“网络盘”的关键代码。
[关键词]VB6.0APIAccess局域网网络盘
在信息技术课的教学和考试中经常需要共享制作素材、收发文件。
大多数的老师都习惯于用直接共享文件夹的方法。
这种做法虽然简单易行,但是保密性差。
学生之间能相互抄袭,相互删改,在一些学生思想道德素质不高的班级里,这一点令老师非常头痛。
另外,一个机房通常会让几个老师十几个班级轮流上课,为了安全还得不断地共享和取消共享。
为解决这一问题,有些老师通过IIS创建FTP服务器或BBS论坛面向用户收发文件。
这种做法使用B/S架构,有很多优点,备受青睐,确实是一种好的方法。
但其最大的缺点是:
学生要进行下载和上传文件的繁琐操作,且不能实时保存到服务器(只能先保存到本机后再上传)。
操作稍有差池、死机、掉电都可能对保存数据造成非常大的影响。
也有部分老师使用某些电子教室软件(如:
凌波、易思、极域等)附带的收发文件的功能。
其收发文件的过程无需学生的干预,收发准确快速稳定。
遗憾的是,这种做法同样具有不能实时保存到服务器的弊端。
更重要的是无身份识别的功能,只能面向特定的学生机收发而不是面向特定的学生。
收发的操作全部在服务器端进行,非常繁琐,容易误操作,更不可能连续几节课自动收发。
因此,我亲自动手制作了一个保密性高,稳定安全且操作简单方便的学生个人“网络盘”。
1.“网络盘”的设计思路
Windows早已为我们准备好了网络盘,我们要做的只是要更好地控制和管理它。
大家都知道,使用Windows可以将局域网内其他计算机的共享文件夹映射成网络驱动器,即所谓的“网络盘”(如:
X:
Y:
)。
对此网络盘的操作方法跟本地盘的是完全一致的,能直接存取网络盘中的文件。
而在VB中调用相应的API函数,可以在服务器端自动设置或取消文件夹的共享,也可以在学生机端自动映射或断开网络盘。
因此,可以设计程序在服务器端按学生名单自动批量制作各个学生的个人文件夹,并设置隐藏的加密共享。
学生机使用客户端程序验证学生身份后,便能自动将服务器中的特定个人文件夹映射成网络驱动器。
如下图所示:
具体的操作流程:
对于学生而言,登陆之后只是感觉到多了一个硬盘分区,无须再说明其他的操作方法。
服务器端程序可管理学生名册,可增删网络盘,增删各个网络盘内的文件等;而客户端程序可验证学生身份,自动映射或断开网络盘,可监测网络盘内的文件类型及总容量,并可帮助学生在退出网络盘后自动关机或重启。
学生无法进入他人的网络盘,在使用网络盘的过程中也不能自行断开网络盘,不能乱塞文件,否则强制自动关机。
笔者选择的编程语言是VB6.0,后台数据库是Access。
学生机程序放在服务器共享给学生机,通过网络共享运行,便于更新升级。
2.关键代码
程序的关键是正确使用设置/取消共享、映射/断开网络驱动器的API函数。
总结如下:
功能
API函数
操作系统
服务器端
客户端
设置共享
取消共享
映射网络驱动器
断开网络驱动器
Win98
NetShareAdd50
NetShareDelete
WNetAddConnection2
WNetCancelConnection2
NT以上版本
NetShareAdd
NetShareDel
现以服务器的操作系统为Win2000的情况为例,将关键的代码及实现过程简介如下:
因篇幅所限,略去制作学生个人文件夹的的步骤,略去读取Access数据库信息的代码,略去API函数声明及其有关的常数、结构的定义。
读者可自行查阅有关API函数用法的帮助文件。
(1)设置共享(服务器端)
设置共享的过程,便是读取数据库,并按数据库中学生信息反复调用某个设置共享的函数建立共享。
NT以上操作系统设置共享的函数:
PublicFunctionCreateShareNT(ByValsSharePathAsString,_
ByValsShareNameAsString,_
ByValsRemarkAsString,_
ByValsROPassAsString,_
ByValsRWPassAsString,ByValbShareTypeRWAsBoolean)AsLong
‘参数说明:
‘sSharePath被共享的文件夹路径
‘sShareName共享名,加密并加字符$
‘sRemark共享的备注信息
‘sROPass只读共享密码
‘sRWPass完全共享密码
‘bShareTypeRW共享类型,True为完全,False为只读
DimreAsString
DimsServerAsString
DimlngServerAsLong
DimlngNetnameAsLong
DimlngPathAsLong
DimlngRemarkAsLong
DimlngPwAsLong
DimparmerrAsLong
Dimsi2AsSHARE_INFO_2
sServer=""'本地共享
lngServer=StrPtr(sServer)'转成地址
lngNetname=StrPtr(sShareName)
lngPath=StrPtr(sSharePath)
'如果有备注信息
IfLen(sRemark)>0Then
lngRemark=StrPtr(sRemark)
EndIf
'如果有密码
IfLen(sRWPass)>0Then
lngPw=StrPtr(sRWPass)
EndIf
'初始化共享信息
Withsi2
.shi2_netname=lngNetname
.shi2_path=lngPath
.shi2_remark=lngRemark
.shi2_type=STYPE_DISKTREE
.shi2_permissions=IIf(bShareTypeRW,ACCESS_ALL,ACCESS_READ)
.shi2_max_uses=-1
.shi2_passwd=lngPw
EndWith
'设置共享(用户名,共享类型,共享信息)
CreateShareNT=NetShareAdd(lngServer,2,si2,parmerr)
EndFunction
可类似地编写出Win98系统下设置共享的函数CreateShare98
‘被反复调用的设置共享的函数:
PublicFunctionCreateShare(ByValsSharePathAsString,_
ByValsShareNameAsString,_
ByValsRemarkAsString,_
ByValsROPassAsString,_
ByValsRWPassAsString,ByValbShareTypeRWAsBoolean)AsLong
IfOSIsWin98Then
CreateShare=CreateShare98(sSharePath,_
sShareName,_
sRemark,_
sROPass,_
sRWPass,bShareTypeRW)
Else
CreateShare=CreateShareNT(sSharePath,_
sShareName,_
sRemark,_
sROPass,_
sRWPass,bShareTypeRW)
EndIf
EndFunction
其中调用了一个判断系统版本的子函数OSIsWin98,其代码在此略。
设置共享的过程:
PrivateSubCreateShareS()
……
Do
CreateShare"d:
\ShareDir\"&rs("XueHao")&rs("XingMing"),_
JiaMiStr(rs("XueHao")&rs("XingMing"))&“$”,_
“”,”lupheace”,”lupheace”,True
rs.MoveNext
LoopUntilrs.EOF
rs.Close
EndSub
其中JiaMiStr是加密字符串的函数,其代码在此略。
(2)删除共享(服务器端)
删除共享的过程,便是读取数据库,并按数据库中学生信息反复调用某个删除共享的函数。
NT以上操作系统删除共享的函数:
PublicFunctionDeleteShareNT(sShareNameAsString)AsLong
DimsServerAsString
DimlngServerAsLong'计算机名
DimlngNetnameAsLong'共享名
sServer=""
lngServer=StrPtr(sServer)'转成地址
lngNetname=StrPtr(sShareName)
DeleteShareNT=NetShareDel(lngServer,lngNetname,0)
EndFunction
可类似地编写出Win98系统下删除共享的函数DeleteShare98
被反复调用的删除共享的函数:
PublicFunctionDeleteShare(ByValsShareNameAsString)AsLong
IfOSIsWin98Then
DeleteShare=DeleteShare98(sShareName)
Else
DeleteShare=DeleteShareNT(sShareName)
EndIf
EndFunction
其中调用了一个判断系统版本的子函数OSIsWin98,其代码在此略。
删除共享的过程:
PrivateSubDeleteShareS()
……
Do
DeleteShareJiaMiStr(rs("XueHao")&rs("XingMing"))&“$”
rs.MoveNext
LoopUntilrs.EOF
rs.Close
EndSub
(3)映射网络驱动器(客户端)
无论是Win98还是NT以上版本的操作系统,都可用同一组映射/断开网络驱动器的API函数。
PublicFunctionCreateNetDrive()AsBoolean
DimNetRAsNETRESOURCE
DimErrInfoAsLong
NetR.dwScope=RESOURCE_GLOBALNET
NetR.dwType=RESOURCETYPE_DISK
NetR.dwDisplayType=RESOURCEDISPLAYTYPE_SHARE
NetR.dwUsage=RESOURCEUSAGE_CONNECTABLE
NetR.lpLocalName="X:
"
NetR.lpRemoteName=RemoteDiskPath‘远程文件夹网络路径,根据学生登陆信息生成
ErrInfo=WNetAddConnection2(NetR,"lupheace",vbNullString,CONNECT_UPDATE_PROFILE)
CreateNetDrive=(ErrInfo=NO_ERROR)
EndFunction
(4)断开网络驱动器(客户端)
PublicFunctionDeleteNetDrive()AsBoolean
DimErrInfoAsLong
DimstrLocalNameAsString
strLocalName="X:
"
ErrInfo=WNetCancelConnection2(strLocalName,CONNECT_UPDATE_PROFILE,True)
'True表示所有连接都强制断开
DeleteNetDrive=(ErrInfo=NO_ERROR)
EndFunction
3.结束语
用这种方法实现的学生个人“网络盘”高效稳定,保密性好,大大方便了对共享文件的使用和管理。
它的优点是:
能实时保存,操作简便,收发过程自动完成,并能连续几节课自动收发。
将服务器端和客户端程序的功能稍稍增强,即可让“网络盘”额外具有学生报到、修正学生机时间、信息广播、显示实时座位表、使用记录等实用的机房管理功能。
笔者在“网络盘”的基础上已完成《小飞侠考试改卷系统》的编写。
“网络盘”在日常教学中担当着广播文件,收发作业的角色,而在考试时担当着收发试卷的角色。
该软件投入教学已有两年多,测试通过的系统包括Win98、Win2000、WinXP和Win2003,同时操作的学生数量在60人左右,效果良好。
希望本文能给读者一些参考和启迪.。
不当之处,请批评指正。
备注:
《小飞侠考试改卷系统》下载地址:
作者邮箱:
lupheace99@QQ:
39135831
参考文献:
1.《VisualBasic6技术大全》机械工业出版社
2.《WindowsAPI函数参考手册》人民邮电出版社