随着信息技术的发展,企业越来越需要具备对市场快速反应的能力,以适用不断变化的市场和不同的用户需求,这就要求企业为更多的经常在户外工作的员工提供随时随地的访问信息的能力,这不单单促使企业对移动设备的需求增加,也促进了针对户外工作的解决方案实现。
本系列文章就是针对物品快递服务的“数字签名”实现。在快递员将物品送到客户处后,通常需要客户在纸质签收单上进行签名,而这里是通过Windows Mobile完成签收操作。在实际的应用中,我们可以通过一种名为“合并复制”的技术将签名信息发送到服务器上的数据库中,能而这种实现方式,需要在服务器上进行一系列的配置,过程非常复杂。而在本文中,使用的是另外一种实现方式,也是最基础、最底层的实现——利用Socket将Windows Mobile上保存的“数字签名”信息发送到PC端。
本程序中主要包含一个运行于Windows Mobile的客户端程序,它通过TCP Socket将“数字签名”信息发送到PC端上,由PC端的服务器程序负责“数字签名”信息的接受和解析。考虑到“数字签名”的重要性,“数字签名”信息在传输时将进行加密,而后通过服务器端程序进行解密,再将还原后的“数字签名”信息进行解析。
在本系列文章中包含如下的主题:
通过Socket传输数据
异步调用
调用Control.Invoke完成程序界面的通知与更新
使用Win 32 crypto API对数据进行加密和解密
对数据进行编码操作
对XML配置文件进行读/写操作
访问注册表
使用双缓冲绘制图形
显示位图资源
GDI函数的使用
在多个工程中共享代码文件
本系列文章使用到的一些重要的函数均封装带在可重用的类中,你可以在本文最后的“类说明”列表中查看这些类的详细描述和使用说明。
概要
该实例包含两个工程:(1) PocketSignature是运行于Windows Mobile上的客户端程序,因此需要.Net Compact Framework 的支持才可以运行。(2) DesktopSignature是运行于PC上的服务器端程序,需要.Net Framework的支持。
Windows Mobile客户端程序
客户端程序的主要功能就是从一个自定义控件中获取数字签名信息,这些信息主要包括组成用户签名的笔画,而每段笔画又是由点坐标构成的,最后对“数字签名”信息进行加密,并通过Socket传输到PC上的服务器端进行解密和解析。“数字签名”自定义控件如图1所示:

客户端程序的相关配置信息都存储在Windows Mobile中一个后缀为“.config”的XML配置文件中。这些配置信息包括服务器端的IP地址、端口号和公钥。客户端程序中存在一个对上述配置信息进行设置的窗口,如图2所示:

PC上的服务器端程序
服务器程序接受由Socket传输过来的加密数据,并利用CryptDecrypt函数对加密信息进行解密。在服务器端程序中,包含四个不同的选项卡,分别用来呈现“数字签名”图形、组成每段笔画的点坐标、加密数据和解密数据。在“数字签名”选项卡中,除了将已经经过解密和解析的“数字签名”信息还原并以图形的方式进行呈现外,还会根据当前窗口的大小自动调整“数字签名”图形的显示比例,以获得非常好的的呈现效果。如图3所示

在“数字签名”图形中,由于每段笔画都是由若干个点组成的,而这些点的X和Y坐标我们可以通过服务器端的“点信息”选项卡查看到。如图4所示

服务器端程序最初接受到的是加密的“数字签名”信息,我们可以在“加密数据”选项卡中查看这些加密数据。如图5所示

服务器端程序完成“数字签名”数据的解密后,我们才可以解析原始的“数字签名”信息。通过“解密数据”选项卡就可以查看解密后的“数字签名”数据,如图6所示。
