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