基于Socket网络编程的远程物流防伪系统的设计
随着电子及自动化的飞速发展,拥有GPRS无线采集模块功能的智能采集器已随处可见,很多用户已经开始陆续使用智能采集器收集产品条码信息。虽然智能采集终端本身有自带的GPRS无线传输系统,但这些系统只是提供实际用户一个功能的扩展,其功能不够完善,并不能满足所有用户的实际需要,这使得智能采集终端不能充分发挥其智能化。因此笔者提出了利用socket网络编程来实现远程物流真伪查询系统。
笔者充分针对用户需求,利用socket网络编程和智能采集终端的GPRS无线传输功能,开发出满足用户需要的远程物流防伪系统。用户只需要下载该系统,通过简便、美观的操作界面,便可实现智能采集终端的即时查询功能,有效地实现了商品信息的防伪查询以及即时跟踪物流信息等功能。
1 总体设计
该远程物流查询系统流程图如图1所示。当移动终端采集器扫描完产品上附带的编码信息后,通过socket套接字所指定服务器的IP及端口和GPRS无线网络将采集的编码信息发送给远程的服务器端。远程服务器端通过检索其数据库,将该商品相应的查询相关信息返回给采集终端。最终在采集终端将该商品的相应信息显示出来,这样便实现了采集终端对商品的即时查询功能。
2 系统环境
2.1 软件开发环境
本系统是在Visual Studio 2010结合SQL Server 2008的环境下开发而成,所选用的开发语言是由微软公司开发的visual basic语言以及功能强大的SQL语言。
通过Visual Studio 2010框架,能够提供对SQL Server2008的高效访问,从而为数据库应用开发提供支撑。Microsoft Visual Studio 2010通过整合的开发环境,让软件开发人员以熟悉技术及工具一致的开发方式,创建各个应用平台。从模型及构架设计、程序的撰写及管理、查错、测试到部署,所有的工作一气呵成,这些工作都在Visual studio 2010中完成。
2.2 智能采集器的GPRS无线采集模块
目前市场上大多数采集器都已具备了GPRS无线采集模块的功能。该系统所采用的采集器为新大陆科技集团生产的PT980系列产品,其GPRS无线采集模块如图2所示。该模块支持TCP/UDP两种通信协议;具有RS485和RS232的通信功能,通过485接口或232接口能方便地采集总线上挂接的各种仪器数据;具有4路开关量输入和4路开关量输出功能;拥有IM字节不掉电数据保存空间,主要用于存储采集到的模拟量和开关量数据;拥有高精度的模拟量采集;具有通过移动电话(手机)短信下载通信参数功能,例如通信中用到的IP地址等等;具有透明数据传输功能;具有支持动态域名解析功能,节约了采用固定IP所带来的昂贵费用;具有商店自动重新连接功能,适合远距离无人值守环境。
2.3 网络环境
本系统所采用的网络环境为GPRS无线网络。GPRS是一种采用分组交换模式传输数据及信令的高效率方式。它克服了电路交换型数据传输速率低、资源利用率差的缺陷。利用GPRS进行数据传输具有资源共享、频率利用率高、数据双向通信传输率高、接入时间短、永远在线等优点。智能采集器可通过GPRS无线网络将商品条码信息发送给远程服务器。在本系统中,远程服务器可同时监听处理多台智能采集器终端同时发送产品编码信息。
3 Socket网络编程
Socket是TCP/IP的编程接口,提供了大量的系统调用构成了网络程序的主体,是标准的C/S模式编程。在操作系统中,它属于文件系统的一部分,网络通信可以被看作是对文件的读取,使得我们对网络的控制和对文件的控制一样方便。ServerSocket用于服务器端,而Soc ket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,通过操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是Serversecket,它们的工作都是通过SecketImpl类及其子类完成。
Socket提供了两种数据传输的协议,分别为TCP和UDP协议;TCP(传输控制协议)提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功
能,保证数据能从一端传到另一端;UDP(用户数据报协议)是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。因为TCP协议不但能保证数据的正确性而且保证数据顺序正确,而UDP协议不能保证,所以TCP协议更符合本系统中传输采集终端所采集的编码的要求,因此本系统采用TCP协议。基于TCP协议的通信流程图如图3所示。
在该流程图中,Socket()用于建立流式套接字;Bind()将套接字与本地地址相连;Listen()通知TCP,使服务器准备好接受连接;Accept()用于接收连接;Read()、Write()这两个函数分别用于套接字上读、写数据,直到数据交换完;Close()用来关闭套接字;Connect()用于将套接字与远地主机连接。其中,Connect()、Accept()、Read()、Write()函数等都有可能造成阻塞,阻塞模式是Socket的缺省方式。客户端和服务器的连接有一个3次握手机制,即服务器调用Socket()、Bind()、Listen()完成初始化后,调用Accept()阻塞等待,处于监听端口的状态。而客户端调用Socket()初始化后,调用Connect()发出SYN段并阻塞等待服务器的应答,服务器应答一个SYN—ACK段,客户端收到后从Con nect()返回,同时应答一个ACK段,服务器收到后从Accept()返回。
4 代码的设计
4.1 服务端
在本系统中,一个服务端可能不只为一个智能采集终端提供服务。当N(N为正整数)台智能采集终端发送请求时,服务端必须做出异步响应,因此,一般在处理服务端的监听时会使用多线程的方法。正因使用了多线程的方法,控制显示控件将接受到的字符显示就必须使用委托的方法;而当程序无法得知从另外一个线程来控制其他线程的合法性,会认为程序有错误,故系统中采用了Delegate类,该类用于派生委托类型,派生前需要明确派生的委托和需要委托的函数输入值相匹配。
该系统可监听最多100个同时的客户端,通过与SQL查询语句,可查询出该产品的编码、仓库等信息。Socket套接字在笔者自定义的wait data()函数中实现,下面即给出了waitdata()函数的代码,来讲解整个Socket编程,其中部分代码后面有详细的注释。查询信息的代码在笔者自己命名的Getdata()函数中实现,分别通过对数据库中的防伪编码表,产品信息表,仓库信息表,入库信息表,发货信息表,供销商信息表的综合查询,将查询信息发送给采集终端,由于字数的限制,文中没有给出Getdata()函数的代码。
评论