基于VB_Winsock控件文件服务器的设计_第1页
基于VB_Winsock控件文件服务器的设计_第2页
基于VB_Winsock控件文件服务器的设计_第3页
基于VB_Winsock控件文件服务器的设计_第4页
基于VB_Winsock控件文件服务器的设计_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 基于vb_winsock控件文件服务器的设计摘要:由于vb6.0简单易懂的开发环境,在工程应用中备受关注。不过其本身不支持多线程技术,在服务器程序开发上有很大的局限性。在一项工程中笔者遇到此类麻烦,虽然通过一些技术可以让vb6.0实现多线程,不过编程复杂,程序稳定性差。在参阅众多服务端程序设计后,笔者通过udp和tcp/ip相互协调使用,并利用自定义文件协议开发出了运行稳定的文件服务器程序。参照本文给出的方法利用vb6.0开发其它服务器程序更加简洁明了。关键词:vb6.0 winsock udp tcp/ip 文件服务器中图分类号:tp311 文献标识码:a 文章编号:1007-9416(2

2、011)11-0152-03文件共享是文件服务器的基本功能,在局域网中利用windows自带的共享功能可以方便的实现这一功能,但其安全问题更加致命。很多局域网特别是连接到互联网的局域网都尽量避免开启windows自带的文件共享功能。因此在很多局域网系统中需要重新开发文件服务程序。通过vb6.0利用winsock控件编写网络程序不需调用底层api,能快速搭建自己的网络应用程序。而服务器程序最重要一点是同时处理同一类事物,如文件服务器可能同时要与2个以上的用户传送文件数据,在windows机器上多线程是个很好的处理手段。不过直到vb6.0仍没有能支持多线程开发。因此为了使自己的vb程序能够实现多线

3、程将是一件十分痛苦的事情,且程序稳定性差。为了实现同时与众多客户端通信,笔者参阅众多例程,终于找到一个简单稳定的解决方法,下面详细介绍之。1、winsock控件winsock控件采用的是客户机/服务器模式(client/server,简称c/s)。此模型包括客户机和服务器应用程序。客户应用程序向服务器应用程序提出请求服务,服务器程序侦听到了客户的请求后对客户的请求作出适当的响应,即对客户提供服务。1.1服务器程序的开发模式(1)服务器程序要先设置侦听端口,即localport属性。该值可设为其它程序没用过的四位整数。(2)将服务器设置成侦听状态,即用listen方法侦听,使服务器始终处于等待客

4、户连接请求的状态。(3)当客户机程序发出连接请求后,将触发服务器程序的connetionrequest事件,该事件得到requestid参数。(4)服务器程序接受客户机程序requestid请求后,服务器程序就可以使用senddata方法向客户机发送数据了。(5)当服务器程序接收到数据时,会产生dataarrival事件。在该事件中可以使用getdata方法接收数据。1.2客户机程序的开发模式(1)客户程序要先设置remotehost属性,用来指向服务器的主机名或ip地址。(2)设置remoteport属性,用来指向服务器程序的侦听端口号。(3)服务器接受了上述连接请求后,客户机程序将产生co

5、nnect事件。在该事件中编写“与服务器连接”的程序。(4)连接成功后,就可用senddata方法向服务器发送数据了。(5)当客户机程序接收到数据时,会产生dataarrival事件,在该事件中编写程序,用getdata方法接收数据。1.3 winsock控件采用的协议winsock控件采用tcp/ip或udp协议进行通信。协议是指通信双方约定的通信规则,即通信所使用的语言。tcp/ip协议用于传送容量大、安全性高的数据文件。设计时需要将winsock控件的protocol属性设置为scktcpprotocol。udp(用户数据文报协议)适用于需要分别与很多下属通信、数据量小的情况。设计时需要

6、将winsock控件的protocol属性设置为sckudpprotocol。2、文件服务通信协议设计此处开发的文件服务器提供文件下载、文件上传、文件删除三个基本功能,客户端对文件的操作权限和操作记录通过建立数据库管理。在服务器上一直运行一个主程序,主程序(main.exe)负责在udp协议下监听客户端的连接请求,根据请求内容shell一个文件服务程序(filesv.exe);之后filesv.exe与客户端采用tcp/ip协议反向连接;连接成功后由filesv.exe为客户端提供文件服务。udp协议不需面向连接,main.exe就可以实现与众多客户端通信;filesv.exe采用面向连接的t

7、cp/ip协议,确保文件传输的安全性和大容量传输。客户端与服务器连接过程设计如图1。服务器的filesv.exe有2个winsock控件,winsock_info负责传送文件信息、各种文件操作协议;winsock_send负责传送文件数据。客户端的winsock1控件的用途与服务器的winsock_info相同,winsock2负责用udp协议向服务器发送连接数据,winsock3与服务器的winsock_send相同。图1 客户机与服务器连接协议示意图客户端的winscok2用udp协议向服务器发送的数据为字符型数据,格式为“客户机ip:winsock1监听端口”,如发送数据为“192.16

8、8.156.2:5034”。main.exe获得这个数据后采用“shell app.path&filesv.exe :5034” 这句程序运行一个filesv.exe以实现与客户端的连接。winsock_info主要传送操作信息,操作信息定义为字符型数据,格式为“aaa&内容”,其中aaa为操作符,内容为操作符的扩充。操作符定义如表1。如向客户端发送winsock_send的监听端口(2594),发送内容为:“ppp2594”。表1 操作符定义filesv.exe与客户段连接成功后,客户端上传文件的操作流程为:客户端winsock1发送“sfn&文件路径”如“sfn1

9、23456test.dat”;filesv.exe的winsock_info收到操作请求,先检查文件是否存在,如文件存在向客户端winsock1发送“fin&文件大小” ,文件不存在向客户端winsock1发送“fno&文件路径”;客户端winsock1收到“fin&文件大小”可以提示覆盖文件或者取消传送;取消直接发送“end”结束会话;收到“fno&文件路径”将直接上传。上传文件将向filesv.exe发送“sfs”,表示准备传送文件开始;filesv.exe收到“sfs”后打开文件写操作,并向客户段发送“sok”;客户端winsock1收到“sok”后启动上传文件过程,由winsock3向

10、filesv.exe发送文件;filesv.exe的winsock_send负责接收数据然后将数据写到文件;文件发送结束后客户端winsock1发送“sfe”;filesv.exe收到“sfe”后,关闭写文件,向客户端winsock1发送“end”并退出程序;客户端接收到“end”后退出程序。客户端下载文件的操作流程为:客户端winsock1发送“gfn&文件路径”;filesv.exe的winsock_info收到操作请求,先检查文件是否存在,如文件存在向客户端winsock1发送“fin&文件大小” ,文件不存在向客户端winsock1发送“fno&文件路径”;客户端winsock1收到“

11、fno&文件路径”可以提示文件不存在,直接发送“end”结束会话,收到“fin&文件大小”将打开写文件操作,然后向filesv.exe发送“sfs”,表示准备传送文件开始;filesv.exe收到“sfs”后打开文件,并通过winsock_send连接向客户发送文件;客户端winsock3负责接收数据然后将数据写到文件;文件发送结束后,filesv.exe通过winsock_info向客户端winsock1发送“sfe”;客户端收到“sfe”后,关闭写文件,向filesv.exe发送“end”并退出程序;filesv.exe接收到“end”后退出程序。客户端删除文件的操作流程为:客户端wins

12、ock1发送“dfn&文件路径”;filesv.exe的winsock_info收到操作请求,先检查文件是否存在,如文件存在向客户端winsock1发送“fin&文件大小”,文件不存在向客户端winsock1发送“fno&文件路径”;客户端winsock1收到“fno&文件路径”可以提示文件不存在,直接发送“end”结束会话,收到“fin&文件大小”,然后向filesv.exe发送“del”,表示确认删除文件;filesv.exe收到“del”后删除文件,删除成功向客户段发送“dse”,删除失败向客户段发送“dfa”;客户端收到“dse”或“dfa”后,做相应提示,向filesv.exe发送“

13、end”并退出程序;filesv.exe接收到“end”后退出程序。3、程序实例设计3.1 main.exe设计3.1.1程序界面设计(1)创建一个“标准的exe”工程。选中“工程”菜单的“部件”选项,在控件中找到microsoft winsock control并将其选中。若没找到,可找到安装盘并安装其中的mswinsck.cab压缩包。(2)在窗体上添加winsock控件,名称为wck_server。3.1.2代码设计private sub form_load()wck_tocol = sckudpprotocol wck_server.localport =5005

14、端口自定wck_server.bindend subprivate sub wck_server_dataarrival(byval bytestotal as long)dim s as stringwck_server.getdata sshell app.path & “filesv.exe “ & send sub在代码设计窗口中编辑相应的事件过程中设计代码,并成功编译程序并命名为main.exe。3.2 filesv.exe设计3.2.1程序界面设计(1)创建一个“标准的exe”工程。form.visible设置为faulse(2)在窗体上添加两个winsock控件,名称分别为wck

15、info和wcksend(3)在窗体上添加三个timer控件, 名称分别为timer1、timer2、timer3timer1定时10s,程序运行开始10s后如果服务器连接客户端没有成功则filesv.exe退出;timer2定时10s,wckinfo连接成功10s后如果客户端与服务器wcksend没有连接则filesv.exe退出。其代码限于篇幅不详细给出。3.2.2代码设计private sub form_load() 获取客户端ip和端口scommand = trim(command)dim p as integerp = instrrev(scommand, “:”, -1, vbbi

16、narycompare)rip = left(scommand, p - 1) 客户端iprport = right(scommand, len(scommand) - p) 客户端端口wckinfo.connect rip, rport 连接客户wcksend.listentimer3.enabled = truetimer1.enabled = true 超时检查开始end subprivate sub timer3_timer()向客户端发送wcksend.listen的端口timer3.enabled = falsedim i as integerfor i = 0 to 10if w

17、ckinfo.state = 7 thenwckinfo.senddata “ppp” & wcksend.localporttimer2.enabled = true 超时检查开始exit subelsemytimer1.wait 500 等待0.5send ifnext iunload me 发送失败退出end subprivate sub wcksend_connectionrequest(byval requestid as long)接收到客户的连接请求if wcksend.state 0 thenwcksend.closemytimer1.wait 1000 等待1send ifw

18、cksend.accept requestidend subprivate sub wckinfo_dataarrival(byval bytestotal as long)收到文件操作数据dim infodata as stringdim myinfodata as stringdim flag as stringwckinfo.getdata infodataflag = left(infodata, 3) 获取操作符myinfodata = right(infodata, len(infodata) - 3) 获取操作内容select case flagcase “sfn” 客户上传文件

19、请求operationflag = 1call mycheckfilepath(myinfodata)case “gfn” 客户下载文件请求operationflag = 2call mycheckfilepath(myinfodata)case “dfn” 客户删除文件请求operationflag = 3delfilepath = myinfodatacall mycheckfilepath(myinfodata)case “del” 客户删除文件确认call mydelfilepath(myinfodata)case “sfs” 客户文件传送开始if operationflag = 1

20、thencall mystartgetfileelseif operationflag = 2 thencall mystartsendfileend ifcase “sfe” 传输文件结束if operationflag = 1 then 接收文件close #getfilenum 关闭写文件end ifcase “end” 结束会话unload mecase elseend selectend sub在代码设计窗口中编辑相应的事件过程中设计代码,如检查文件是否存在、开始发送文件、开始接收文件、删除文件的处理代码,这些代码限于篇幅没有给出,如有需要可以联系笔者。然后成功编译程序并命名为filesv.exe。将filesv.exe与main.exe至于同一目录,完成服务器端程序设计。客户端程序设计可以参考filesv.exe源程序和文件服务器协议

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论