基于Socket網(wǎng)絡(luò )編程的遠程物流防偽系統的設計
隨著(zhù)電子及自動(dòng)化的飛速發(fā)展,擁有GPRS無(wú)線(xiàn)采集模塊功能的智能采集器已隨處可見(jiàn),很多用戶(hù)已經(jīng)開(kāi)始陸續使用智能采集器收集產(chǎn)品條碼信息。雖然智能采集終端本身有自帶的GPRS無(wú)線(xiàn)傳輸系統,但這些系統只是提供實(shí)際用戶(hù)一個(gè)功能的擴展,其功能不夠完善,并不能滿(mǎn)足所有用戶(hù)的實(shí)際需要,這使得智能采集終端不能充分發(fā)揮其智能化。因此筆者提出了利用socket網(wǎng)絡(luò )編程來(lái)實(shí)現遠程物流真偽查詢(xún)系統。
筆者充分針對用戶(hù)需求,利用socket網(wǎng)絡(luò )編程和智能采集終端的GPRS無(wú)線(xiàn)傳輸功能,開(kāi)發(fā)出滿(mǎn)足用戶(hù)需要的遠程物流防偽系統。用戶(hù)只需要下載該系統,通過(guò)簡(jiǎn)便、美觀(guān)的操作界面,便可實(shí)現智能采集終端的即時(shí)查詢(xún)功能,有效地實(shí)現了商品信息的防偽查詢(xún)以及即時(shí)跟蹤物流信息等功能。
1 總體設計
該遠程物流查詢(xún)系統流程圖如圖1所示。當移動(dòng)終端采集器掃描完產(chǎn)品上附帶的編碼信息后,通過(guò)socket套接字所指定服務(wù)器的IP及端口和GPRS無(wú)線(xiàn)網(wǎng)絡(luò )將采集的編碼信息發(fā)送給遠程的服務(wù)器端。遠程服務(wù)器端通過(guò)檢索其數據庫,將該商品相應的查詢(xún)相關(guān)信息返回給采集終端。最終在采集終端將該商品的相應信息顯示出來(lái),這樣便實(shí)現了采集終端對商品的即時(shí)查詢(xún)功能。
2 系統環(huán)境
2.1 軟件開(kāi)發(fā)環(huán)境
本系統是在Visual Studio 2010結合SQL Server 2008的環(huán)境下開(kāi)發(fā)而成,所選用的開(kāi)發(fā)語(yǔ)言是由微軟公司開(kāi)發(fā)的visual basic語(yǔ)言以及功能強大的SQL語(yǔ)言。
通過(guò)Visual Studio 2010框架,能夠提供對SQL Server2008的高效訪(fǎng)問(wèn),從而為數據庫應用開(kāi)發(fā)提供支撐。Microsoft Visual Studio 2010通過(guò)整合的開(kāi)發(fā)環(huán)境,讓軟件開(kāi)發(fā)人員以熟悉技術(shù)及工具一致的開(kāi)發(fā)方式,創(chuàng )建各個(gè)應用平臺。從模型及構架設計、程序的撰寫(xiě)及管理、查錯、測試到部署,所有的工作一氣呵成,這些工作都在Visual studio 2010中完成。
2.2 智能采集器的GPRS無(wú)線(xiàn)采集模塊
目前市場(chǎng)上大多數采集器都已具備了GPRS無(wú)線(xiàn)采集模塊的功能。該系統所采用的采集器為新大陸科技集團生產(chǎn)的PT980系列產(chǎn)品,其GPRS無(wú)線(xiàn)采集模塊如圖2所示。該模塊支持TCP/UDP兩種通信協(xié)議;具有RS485和RS232的通信功能,通過(guò)485接口或232接口能方便地采集總線(xiàn)上掛接的各種儀器數據;具有4路開(kāi)關(guān)量輸入和4路開(kāi)關(guān)量輸出功能;擁有IM字節不掉電數據保存空間,主要用于存儲采集到的模擬量和開(kāi)關(guān)量數據;擁有高精度的模擬量采集;具有通過(guò)移動(dòng)電話(huà)(手機)短信下載通信參數功能,例如通信中用到的IP地址等等;具有透明數據傳輸功能;具有支持動(dòng)態(tài)域名解析功能,節約了采用固定IP所帶來(lái)的昂貴費用;具有商店自動(dòng)重新連接功能,適合遠距離無(wú)人值守環(huán)境。
2.3 網(wǎng)絡(luò )環(huán)境
本系統所采用的網(wǎng)絡(luò )環(huán)境為GPRS無(wú)線(xiàn)網(wǎng)絡(luò )。GPRS是一種采用分組交換模式傳輸數據及信令的高效率方式。它克服了電路交換型數據傳輸速率低、資源利用率差的缺陷。利用GPRS進(jìn)行數據傳輸具有資源共享、頻率利用率高、數據雙向通信傳輸率高、接入時(shí)間短、永遠在線(xiàn)等優(yōu)點(diǎn)。智能采集器可通過(guò)GPRS無(wú)線(xiàn)網(wǎng)絡(luò )將商品條碼信息發(fā)送給遠程服務(wù)器。在本系統中,遠程服務(wù)器可同時(shí)監聽(tīng)處理多臺智能采集器終端同時(shí)發(fā)送產(chǎn)品編碼信息。
3 Socket網(wǎng)絡(luò )編程
Socket是TCP/IP的編程接口,提供了大量的系統調用構成了網(wǎng)絡(luò )程序的主體,是標準的C/S模式編程。在操作系統中,它屬于文件系統的一部分,網(wǎng)絡(luò )通信可以被看作是對文件的讀取,使得我們對網(wǎng)絡(luò )的控制和對文件的控制一樣方便。ServerSocket用于服務(wù)器端,而Soc ket是建立網(wǎng)絡(luò )連接時(shí)使用的。在連接成功時(shí),應用程序兩端都會(huì )產(chǎn)生一個(gè)Socket實(shí)例,通過(guò)操作這個(gè)實(shí)例,完成所需的會(huì )話(huà)。對于一個(gè)網(wǎng)絡(luò )連接來(lái)說(shuō),套接字是平等的,并沒(méi)有差別,不因為在服務(wù)器端或在客戶(hù)端而產(chǎn)生不同級別。不管是Socket還是Serversecket,它們的工作都是通過(guò)SecketImpl類(lèi)及其子類(lèi)完成。
Socket提供了兩種數據傳輸的協(xié)議,分別為T(mén)CP和UDP協(xié)議;TCP(傳輸控制協(xié)議)提供的是面向連接、可靠的字節流服務(wù)。當客戶(hù)和服務(wù)器彼此交換數據前,必須先在雙方之間建立一個(gè)TCP連接,之后才能傳輸數據。TCP提供超時(shí)重發(fā),丟棄重復數據,檢驗數據,流量控制等功
能,保證數據能從一端傳到另一端;UDP(用戶(hù)數據報協(xié)議)是一個(gè)簡(jiǎn)單的面向數據報的運輸層協(xié)議。UDP不提供可靠性,它只是把應用程序傳給IP層的數據報發(fā)送出去,但是并不能保證它們能到達目的地。由于UDP在傳輸數據報前不用在客戶(hù)和服務(wù)器之間建立一個(gè)連接,且沒(méi)有超時(shí)重發(fā)等機制,故而傳輸速度很快。因為T(mén)CP協(xié)議不但能保證數據的正確性而且保證數據順序正確,而UDP協(xié)議不能保證,所以TCP協(xié)議更符合本系統中傳輸采集終端所采集的編碼的要求,因此本系統采用TCP協(xié)議?;赥CP協(xié)議的通信流程圖如圖3所示。
在該流程圖中,Socket()用于建立流式套接字;Bind()將套接字與本地地址相連;Listen()通知TCP,使服務(wù)器準備好接受連接;Accept()用于接收連接;Read()、Write()這兩個(gè)函數分別用于套接字上讀、寫(xiě)數據,直到數據交換完;Close()用來(lái)關(guān)閉套接字;Connect()用于將套接字與遠地主機連接。其中,Connect()、Accept()、Read()、Write()函數等都有可能造成阻塞,阻塞模式是Socket的缺省方式??蛻?hù)端和服務(wù)器的連接有一個(gè)3次握手機制,即服務(wù)器調用Socket()、Bind()、Listen()完成初始化后,調用Accept()阻塞等待,處于監聽(tīng)端口的狀態(tài)。而客戶(hù)端調用Socket()初始化后,調用Connect()發(fā)出SYN段并阻塞等待服務(wù)器的應答,服務(wù)器應答一個(gè)SYN—ACK段,客戶(hù)端收到后從Con nect()返回,同時(shí)應答一個(gè)ACK段,服務(wù)器收到后從Accept()返回。
4 代碼的設計
4.1 服務(wù)端
在本系統中,一個(gè)服務(wù)端可能不只為一個(gè)智能采集終端提供服務(wù)。當N(N為正整數)臺智能采集終端發(fā)送請求時(shí),服務(wù)端必須做出異步響應,因此,一般在處理服務(wù)端的監聽(tīng)時(shí)會(huì )使用多線(xiàn)程的方法。正因使用了多線(xiàn)程的方法,控制顯示控件將接受到的字符顯示就必須使用委托的方法;而當程序無(wú)法得知從另外一個(gè)線(xiàn)程來(lái)控制其他線(xiàn)程的合法性,會(huì )認為程序有錯誤,故系統中采用了Delegate類(lèi),該類(lèi)用于派生委托類(lèi)型,派生前需要明確派生的委托和需要委托的函數輸入值相匹配。
該系統可監聽(tīng)最多100個(gè)同時(shí)的客戶(hù)端,通過(guò)與SQL查詢(xún)語(yǔ)句,可查詢(xún)出該產(chǎn)品的編碼、倉庫等信息。Socket套接字在筆者自定義的wait data()函數中實(shí)現,下面即給出了waitdata()函數的代碼,來(lái)講解整個(gè)Socket編程,其中部分代碼后面有詳細的注釋。查詢(xún)信息的代碼在筆者自己命名的Getdata()函數中實(shí)現,分別通過(guò)對數據庫中的防偽編碼表,產(chǎn)品信息表,倉庫信息表,入庫信息表,發(fā)貨信息表,供銷(xiāo)商信息表的綜合查詢(xún),將查詢(xún)信息發(fā)送給采集終端,由于字數的限制,文中沒(méi)有給出Getdata()函數的代碼。
評論