您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 基于指纹仪和读卡器的程序设计
学院通信与信息工程学院课程设计报告专业班级:学生姓名:学号(班内序号):年月日——————————————————————————装订线—————————————————————————————————报告份数:实验总成绩:-1-基于指纹仪和读卡器的程序设计一、实验目的:本次课程设计通过使用指纹仪和读卡器开发包,掌握一般软件包和开发库的基本使用方法。通过对仪器和开发包的理解和使用结合信息安全技术实验中的掌握的网络开发技术,自行选择至少一种设备并设计一个相关的应用题目并实现连远程的数据库和服务器。二、实验时间与实验地点:时间:第5-6周上午:9----17点指导老师:刘意先三、实验环境:PC机一台,Windows,两台读卡器四、程序编写语言:程序编写环境:VC++6.0数据库建立环境:mysql文件传输环境:winsock五、实验任务与要求:实现一个受身份认证控制的网络文件传输应用程序,双方开启应用程序,一方向另一方要求发送文件包前,双方必须刷卡将信息发往对方进行验证,双方都验证通过则允许发送文件。六、实验原理:1、读卡器:读卡器(Reader)是一种专用设备。有插槽可以插入存储卡,有端口可以联接到计算机。把适合的存储卡插入插槽,端口与计算机相连并安装所需的驱动程序之后,计算机就把存储卡当作一个可移动存储器,从而可以通过读卡器读写存储卡。按所兼容存储卡的种类分可以分为CF卡读卡器、SM卡读卡器、PCMICA卡读卡器以及记忆棒读写器等,还有双槽读卡器可以同时使用两种或两种以上的卡;按端口类型分可分为串行口读卡器(速度很慢,极少见)、并行口读卡器(适合于早期主板的计算机)、USB读卡器(速度快,使用方便)。2、实现带有用户身份验证的文件传输WebService一、理解WebService首先让我们简单理解一下WebService。Webservices实际上是基于XML的针对商业、应用程序的系统服务。实际上是建立在一系列已有的技术基础上的一个新的概念。使用它如同使用RPC(远程过程调用),不过它提供的接口是基于对象的。它与原有的组件模型,如com/dcom,corba,rmi等,最大的特点就是标准化(基于XML的一系列标准)带来的跨平台的通用性,基于http带来的畅通无阻的能力(跨越防火墙),-2-对于DotNet来说,配合VisualStudio.Net其中的WebService还具有易用性的特点。用户即便不懂那些相关标准,只要会面向对象变成,对WebService有个初步的了解就可以动手写WebService了。如何建立一个Webservice呢?下面的技术步骤获得了工业界普遍认同。1.服务提供者建立、组织和发布网络服务。它的手段是多样的,可以使用编程语言(例如Delphi,Java,C#等)、中间件或其它特殊平台来完成。2.服务提供者用WSDL(theWebServicesDescriptionLanguage)来提供服务描述。.WSDL文档向第三方提供服务描述。3.服务提供者向UDDI(UniversalDescription,Discovery,andIntegration)注册表注册网络服务。UDDI使得开发者发布服务并且可以通过软件搜索其它人提供的服务。用户将通过搜索UDDI注册表来搜索服务。4.客户端应用程序通过和网络服务绑定并且通过SOAP(theSimpleObjectAccessProtocol)来激活网络服务相应的操作。SOAP提供XML格式的参数和返回结果,并利用HTTP传送。所有网络服务都通过SOAP通讯。上面的第一步是核心,它决定了你的WebService的用途和接口。第二步在VisualStudio.Net中被自动完成,大家当然也可以用WSDL.exe手动生成。第四步在客户端编程时VisualStudio提供了最大的便利。用户只要使用”AddWebServiceReference”或者“添加Web服务引用”(中文版),敲入网址,VisualStudio.Net就会自动生成调用WebService的类,底层的SOAP对用户完全透明。但是,当用户需要考虑安全性时就不得不考虑一下soap了。记住,安全性是将来必须考虑的,在将来软件开发变为配置集成,软件产品变为服务,购买软件变为租用软件,大部分服务都基于网络时,你可能得考虑谁可以用你的服务,谁不可以用你的服务了,当然,我也比较赞同开放源代码和公开交流技术,我把自己辛苦钻研出来的东西写出来也表明了我的态度。但是,毕竟,我们还是要靠写软件吃饭的:)在webservice中,用户名,密码可以通过soap头(soapheader)进行传送。在webservice的编写中,需要对soap头进行处理,不过这也不太难,大家认识到这一点然后看我下面的例子就可以学会如何利用它了。二、代码实现首先,我们实现一个用于身份验证的类,文件名Authentication.cs为代码如下:usingSystem;namespaceuseResData{//////实现带有用户身份验证的文件传输WebService///publicclassAuthentication:System.Web.Services.Protocols.SoapHeader{publicstringUsername;publicstringPassword;publicBooleanValidUser(stringin_Username,-3-stringin_Password){if((in_Username==caomo)&&(in_Password==password)){returntrue;}else{returnfalse;}}publicAuthentication(){////TODO:Addconstructorlogichere//}}}Authentication类继承自System.Web.Services.Protocols.SoapHeader。且定义了两个成员变量,Username和Password,还定义了一个用户认证的函数ValidUser。它提供了对Username和Password检查的功能,你可以把它写得很复杂,诸如通过访问数据库来检查用户的有效性。我在这里只是简单检查了固定值的相等性。/**WinSock实现网络文件传输程序*Windows2003+VisualC++6.0编译通过*brick2007.4.1*/#pragmacomment(lib,ws2_32.lib)#includestdio.h#includestring.h#includewinsock2.h#includewindows.h#includeassert.h#defineCHARLENGTH80//字符串长//#defineSEND_BUFFER_SIZE1024//发送缓冲区//#defineRECV_BUFFER_SIZE1024//接收缓冲区//#definePORT8508//默认端口//#defineTRUE1#defineFALSE0enum{CMD_NAME};-4-intRecvFile();//接收intSendFile();//发送intusage(charmsg[]);//帮助提示intmain(intargc,char*argv[]){charoperate[CHARLENGTH];memset(operate,'\0',sizeof(operate));usage(argv[CMD_NAME]);while(printf(\n\n)&&printf(请输入参数:)&&scanf(\n%s,operate)!=EOF){if(strlen(operate)2){usage(argv[CMD_NAME]);continue;}switch(operate[1]){case'r':RecvFile();break;case's':SendFile();break;case'q':printf(谢谢使用[%s]\nByeBye!\n\n,argv[CMD_NAME]);return(0);break;default:usage(argv[CMD_NAME]);break;}}return(0);}//接收函数intRecvFile(){charfilePath[CHARLENGTH];printf(请输入保存文件的绝对路径:\n);//获取文件保存路径//memset(&filePath,'\0',sizeof(filePath));scanf(\n%s,filePath);WSADATAwsaData;WSAStartup(WINSOCK_VERSION,&wsaData);//建立连接/////////////////////////////////////////////////////////////////////////////SOCKETsockrecv=socket(AF_INET,SOCK_STREAM,0);//创建套接字//if(sockrecv0){closesocket(sockrecv);WSACleanup();perror(sock);printf(警告:创建套接字失败!\n);return(FALSE);}-5-SOCKADDR_INaddrSrv;memset(&addrSrv,'\0',sizeof(addrSrv));addrSrv.sin_family=AF_INET;addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//填充本地ip//addrSrv.sin_port=htons(PORT);//填充默认端口//intret1=bind(sockrecv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));//绑定套接字//if(ret10){closesocket(sockrecv);WSACleanup();perror(bind);printf(警告:绑定失败!\n);return(FALSE);}printf(等待连接......);intret2=listen(sockrecv,5);//开始监听,限制5个连接//if(ret20){closesocket(sockrecv);WSACleanup();perror(listen);printf(警告:监听失败!\n);return(FALSE);}SOCKADDR_INaddrCli;memset(&addrCli,'\0',sizeof(addrCli));intlen=sizeof(SOCKADDR);SOCKETsockCli=accept(sockrecv,(SOCKADDR*)&addrCli,&len);//开始接收//if(sockCli0){closesocket(sockrecv);WSACleanup();perror(accept);printf(警告:接收失败!\n);return(FALSE);}printf(已经连接%s\n,inet_ntoa(addrCli.sin_addr));//显示连接端信息//intfileLength,cbBytesRet,cbLeftToRecv;BYTE*recvData=NULL;//创建文件//HANDLEhFile;-6-hFile=CreateFile(filePath,//string文件名或者绝对路径GENERIC_WRITE,//long读写权限,如果为零,表示只允许获取与一个设备有关的信息FILE_SHARE_WRITE,//long零表示不共享,FILE_SHARE_READ或FILE_SHARE_WRITE表示允许对文件进行共享访问NULL,//指向SECURITY_ATTRIBUTES结构的指针,判定返回的句柄是否可以被子进程继承,定义了文件的安全特性,用null表示不被继承。O
本文标题:基于指纹仪和读卡器的程序设计
链接地址:https://www.777doc.com/doc-2575174 .html