陳中孝,孫世明,劉盼盼
(西安工業(yè)大學(xué)電子信息工程學(xué)院,陜西 西安 710021)
糧食是國(guó)民經(jīng)濟(jì)發(fā)展的基礎(chǔ),也是戰(zhàn)略儲(chǔ)備物資的重要組成部分,糧食的數(shù)量與安全直接關(guān)系到我國(guó)國(guó)民經(jīng)濟(jì)的發(fā)展和社會(huì)的穩(wěn)定。我國(guó)目前大部分糧庫(kù)依然采用原始的方式進(jìn)行儲(chǔ)存,造成大量的糧食損耗[2]。針對(duì)這種情況我國(guó)投資建設(shè)了一批現(xiàn)代化糧庫(kù),新型糧庫(kù)規(guī)模大、容量大,但不易實(shí)時(shí)監(jiān)測(cè)與集中管理。這種形勢(shì)下,各類糧情遠(yuǎn)程檢測(cè)系統(tǒng)就應(yīng)運(yùn)而生。
本文介紹的基于VPN遠(yuǎn)程糧情檢測(cè)系統(tǒng)通過(guò)VPN服務(wù)器建立虛擬專用網(wǎng)絡(luò),系統(tǒng)中數(shù)據(jù)在VPN這種安全可靠的虛擬隧道中實(shí)現(xiàn)遠(yuǎn)程傳輸,同時(shí)由于VPN利用公用網(wǎng)絡(luò)建設(shè)專用網(wǎng)絡(luò),可以在保證數(shù)據(jù)安全傳輸?shù)那闆r下避免高昂的網(wǎng)絡(luò)通訊和維護(hù)的費(fèi)用[3]。本系統(tǒng)的通訊軟件通過(guò)使用Winsock技術(shù)訪問(wèn)TCP/IP網(wǎng)絡(luò),使得開(kāi)發(fā)人員不必深入了解路由選擇、流量控制、擁塞控制、分段組裝、檢錯(cuò)糾錯(cuò)和QoS協(xié)商等底層協(xié)議細(xì)節(jié)[1],只需要調(diào)用 Winsock,由Winsock尋找并利用已經(jīng)安裝好的底層協(xié)議自動(dòng)進(jìn)行復(fù)雜的數(shù)據(jù)傳輸工作,進(jìn)而大幅降低了網(wǎng)絡(luò)通信軟件開(kāi)發(fā)的時(shí)間和經(jīng)費(fèi)投入。
本系統(tǒng)主要由5個(gè)部分組成:遠(yuǎn)程客戶端、VPN服務(wù)器、糧庫(kù)現(xiàn)場(chǎng)工作站、通訊主機(jī)與糧倉(cāng)下位機(jī)及傳感器,系統(tǒng)結(jié)構(gòu)設(shè)計(jì)如圖1所示。遠(yuǎn)程客戶端與現(xiàn)場(chǎng)工作站通過(guò)VPN服務(wù)器構(gòu)建的VPN網(wǎng)絡(luò)連接在一起,遠(yuǎn)程客戶端發(fā)送測(cè)控指令與數(shù)據(jù)獲取指令到糧庫(kù)現(xiàn)場(chǎng)工作站,糧庫(kù)現(xiàn)場(chǎng)工作站根據(jù)具體的測(cè)控指令通過(guò)串行總線將命令傳送至糧庫(kù)下位機(jī),通過(guò)傳感器獲取采集值,現(xiàn)場(chǎng)工作站通過(guò)VPN將采集數(shù)據(jù)或歷史數(shù)據(jù)傳輸回遠(yuǎn)程客戶端。
圖1 系統(tǒng)結(jié)構(gòu)設(shè)計(jì)圖
虛擬專用網(wǎng)絡(luò)(Virtual Private Network,VPN)是Internet技術(shù)迅速發(fā)展的產(chǎn)物,它可以實(shí)現(xiàn)不同網(wǎng)絡(luò)的組件和資源之間的相互連接[8]。VPN是通過(guò)公用網(wǎng)絡(luò)建立一個(gè)臨時(shí)、安全的連接,也就是說(shuō)VPN利用公共互聯(lián)網(wǎng)的設(shè)備搭建虛擬專用的隧道。VPN技術(shù)主要采用隧道技術(shù)、加解密技術(shù)、密鑰管理技術(shù)和使用身份認(rèn)證技術(shù)[6],通過(guò)使用這些技術(shù)保證信息傳輸過(guò)程中不被竊取、篡改和刪除。
VPN技術(shù)的發(fā)展是建立在“隧道”技術(shù)基礎(chǔ)上的,隧道技術(shù)是一種通過(guò)使用互聯(lián)網(wǎng)絡(luò)的基礎(chǔ)設(shè)施在網(wǎng)絡(luò)之間傳遞數(shù)據(jù)的方式[14]。常見(jiàn)的隧道技術(shù)有點(diǎn)對(duì)點(diǎn)隧道協(xié)議PPTP、第二層隧道協(xié)議L2TP和安全套接字隧道協(xié)議SSTP等,它們都是通過(guò)將PPP幀封裝在IP數(shù)據(jù)包中,在IP數(shù)據(jù)包前面加入指定協(xié)議然后進(jìn)行傳輸。本系統(tǒng)采用PPTP隧道協(xié)議,PPTP相較于SSTP支持Windows Vista以下的低版本W(wǎng)indows操作系統(tǒng)[10],同時(shí)PPTP允許多協(xié)議通信進(jìn)行加密,然后封裝在IP標(biāo)頭,在身份驗(yàn)證的過(guò)程中PPTP可使用MS-CHAP v2和EAP-TLS進(jìn)程中生成的加密秘鑰,使用Microsoft點(diǎn)對(duì)點(diǎn)加密對(duì)PPP幀進(jìn)行加密[11]。而相較于其他協(xié)議,基于PPTP的VPN連接可以保證數(shù)據(jù)在傳輸?shù)倪^(guò)程中未更改,并且可以保證數(shù)據(jù)是由經(jīng)過(guò)授權(quán)的用戶發(fā)送的。
在本系統(tǒng)中使用Windows Server 2008 R2 64bit操作系統(tǒng)進(jìn)行VPN網(wǎng)絡(luò)的組建,組建設(shè)備為1臺(tái)CPU為Core i5-4430的計(jì)算機(jī),同時(shí)該計(jì)算機(jī)攜帶2塊網(wǎng)卡,保證服務(wù)器的工作性能。搭建VPN服務(wù)器分為2部分:
1)VPN服務(wù)器的創(chuàng)建部分。首先進(jìn)入系統(tǒng)后,進(jìn)入“服務(wù)器管理器”窗口,在“角色”中添加服務(wù)器角色“網(wǎng)絡(luò)策略和訪問(wèn)服務(wù)”,在其中勾選“遠(yuǎn)程訪問(wèn)服務(wù)”進(jìn)行安裝。安裝成功后,在“服務(wù)器管理器”窗口中右鍵“路由和遠(yuǎn)程訪問(wèn)”,配置并啟用路由和遠(yuǎn)程訪問(wèn),在其中依次勾選“遠(yuǎn)程訪問(wèn)”與“VPN”,在“VPN連接”對(duì)話框中選中連接Internet的網(wǎng)卡,指定VPN向客戶端成員分配的IP地址的范圍,根據(jù)糧情檢測(cè)系統(tǒng)的客戶人群數(shù)量,本系統(tǒng)將地址定為192.168.0.1 到 192.168.0.255。由于 PPTP 身份驗(yàn)證是由操作系統(tǒng)中的進(jìn)程實(shí)現(xiàn)的,在本系統(tǒng)中不使用路由和遠(yuǎn)程訪問(wèn)來(lái)實(shí)現(xiàn)身份驗(yàn)證,點(diǎn)擊完成實(shí)現(xiàn)創(chuàng)建基于PPTP的VPN服務(wù)器。
2)創(chuàng)建新用戶,并賦予用戶遠(yuǎn)程撥入的權(quán)限[4]。進(jìn)入“服務(wù)器管理器”窗口,在“本地用戶和組”中選擇用戶,進(jìn)入后輸入用戶名創(chuàng)建用戶,創(chuàng)建成功后右鍵新用戶名,在屬性對(duì)戶框中選擇“撥入”,網(wǎng)絡(luò)訪問(wèn)權(quán)限中選擇“允許訪問(wèn)”,回?fù)苓x項(xiàng)中選擇“不回?fù)堋?,在分配靜態(tài)IP 中輸入固定 IP 地址,如192.168.0.10,最終點(diǎn)擊確定完成創(chuàng)建用戶,這樣就實(shí)現(xiàn)了系統(tǒng)中的用戶均能獲取一個(gè)虛擬的固定IP。
初次設(shè)置完VPN客戶端后,遠(yuǎn)程客戶端登錄VPN服務(wù)器成功,客戶端可能會(huì)網(wǎng)速變慢甚至無(wú)法訪問(wèn)Internet,若客戶端使用無(wú)線網(wǎng)卡則直接掉線。這是由VPN默認(rèn)路由設(shè)置不當(dāng)帶來(lái)的問(wèn)題,在正常過(guò)程中當(dāng)VPN客戶端與服務(wù)器建立連接后,VPN客戶端路由表中產(chǎn)生2條默認(rèn)路由,其中一條默認(rèn)路由記錄對(duì)應(yīng)的客戶端系統(tǒng)原先的默認(rèn)網(wǎng)關(guān)地址[7],本系統(tǒng)中是127.0.0.1;另一條則指向客戶端與VPN服務(wù)器自動(dòng)生成的網(wǎng)關(guān)地址,本系統(tǒng)中是 192.168.0.20。在默認(rèn)狀態(tài)下,VPN服務(wù)器自動(dòng)生成的默認(rèn)網(wǎng)關(guān)地址優(yōu)先級(jí),要比客戶端系統(tǒng)原先使用的默認(rèn)網(wǎng)關(guān)地址優(yōu)先級(jí)要高[13]。當(dāng)客戶端訪問(wèn)Internet時(shí)需要先通過(guò)VPN服務(wù)器,客戶端上網(wǎng)的情況就會(huì)受到VPN服務(wù)器的帶寬和穩(wěn)定性的影響。在本系統(tǒng)中解決此問(wèn)題通過(guò)取消使用默認(rèn)網(wǎng)關(guān),客戶端設(shè)置的VPN屬性中“網(wǎng)絡(luò)”項(xiàng)中的“Internet協(xié)議版本”,雙擊進(jìn)入后進(jìn)入“高級(jí)”,將“在遠(yuǎn)程網(wǎng)絡(luò)上使用默認(rèn)網(wǎng)關(guān)”取消。VPN網(wǎng)絡(luò)連接后,仍然通過(guò)本地路由訪問(wèn)Internet網(wǎng)絡(luò),那么網(wǎng)絡(luò)訪問(wèn)速度也就恢復(fù)正常了。
本系統(tǒng)遠(yuǎn)程通訊軟件的主要功能由以下2個(gè)部分實(shí)現(xiàn):現(xiàn)場(chǎng)工作站和遠(yuǎn)程客戶端。現(xiàn)場(chǎng)工作站執(zhí)行遠(yuǎn)程客戶端的檢測(cè)命令,并將數(shù)據(jù)發(fā)送至遠(yuǎn)程客戶端。在進(jìn)入現(xiàn)場(chǎng)工作站遠(yuǎn)程被控界面后,系統(tǒng)進(jìn)入等待連接狀態(tài)。因?yàn)楝F(xiàn)場(chǎng)工作站要盡量實(shí)現(xiàn)無(wú)人化操作,則要求通訊軟件能夠?qū)崿F(xiàn)對(duì)當(dāng)前網(wǎng)絡(luò)狀態(tài)的檢測(cè),并能夠?qū)崿F(xiàn)自動(dòng)斷網(wǎng)重連等網(wǎng)絡(luò)恢復(fù)功能。
3.1.1 Winsock 技術(shù)
本系統(tǒng)通訊軟件使用MFC中Winsock程序開(kāi)發(fā)工具。Winsock建立在TCP/IP協(xié)議棧之上,提供面向連接的網(wǎng)絡(luò)服務(wù),可以大大降低程序開(kāi)發(fā)工作量,它包含了一組針對(duì)Windows的擴(kuò)展庫(kù)函數(shù),便于程序員利用Windows消息驅(qū)動(dòng)機(jī)制進(jìn)行編程。Windows Sockets規(guī)范定義并記錄了如何使用API與Internet協(xié)議族連接,所有的Windows Sockets實(shí)現(xiàn)都支持流套接口和數(shù)據(jù)報(bào)套接口[1]。
3.1.2 套接字
套接字(Socket)是支持TCP/IP協(xié)議網(wǎng)絡(luò)通信的基本操作單元,它是不同主機(jī)之間的進(jìn)程進(jìn)行雙向通信的端點(diǎn),套接口存在于通信域中[4],通常和同一域中的套接口交換數(shù)據(jù)。根據(jù)網(wǎng)絡(luò)通信的特性,套接字可分為3類:流套接字(SOCK_STREAM)、數(shù)據(jù)報(bào)套接字(SOCK_DGRAM)和原始套接字(SOCK_RAW)[5]。因?yàn)楸鞠到y(tǒng)對(duì)采集數(shù)據(jù)的遠(yuǎn)程傳輸?shù)姆€(wěn)定性和完整性有較高的要求,而流套接字可以提供雙向的、有序的、無(wú)重復(fù)并無(wú)記錄編輯的數(shù)據(jù)流服務(wù),故在本系統(tǒng)中使用流套接字。
3.1.3 客戶端/服務(wù)器模型
客戶端/服務(wù)器模型(C/S模型)是網(wǎng)絡(luò)程序設(shè)計(jì)的基本模型,也是建立分布式應(yīng)用時(shí)的典型結(jié)構(gòu)之一[17]。在C/S模型中,服務(wù)器適中處于監(jiān)聽(tīng)狀態(tài),當(dāng)被監(jiān)聽(tīng)的服務(wù)端口有服務(wù)請(qǐng)求時(shí),立即響應(yīng)客戶的服務(wù)請(qǐng)求??蛻舳嗽诎l(fā)出服務(wù)請(qǐng)求信號(hào)前,必須指定服務(wù)器地址和端口號(hào)才能獲得相應(yīng)的服務(wù)。具體模型如圖2所示。
圖2 客戶端/服務(wù)器模型
本系統(tǒng)中現(xiàn)場(chǎng)工作站和遠(yuǎn)程客戶端通訊軟件程序均是基于Winsock的C/S結(jié)構(gòu)的程序,程序中既要作為服務(wù)器端回應(yīng)來(lái)自遠(yuǎn)程客戶端的糧情測(cè)控請(qǐng)求和采集數(shù)據(jù)發(fā)送請(qǐng)求,同時(shí)還需要作為客戶端發(fā)送請(qǐng)求獲取遠(yuǎn)程客戶端對(duì)現(xiàn)場(chǎng)糧情測(cè)控的配置,如定時(shí)檢測(cè)的檢測(cè)間隔時(shí)間等[9]。本系統(tǒng)中使用的套接字為阻塞模式,然而阻塞模式下Winsock程序未執(zhí)行完時(shí)不交出主線程的控制權(quán),系統(tǒng)在傳輸過(guò)程中執(zhí)行其他動(dòng)作[16],為了解決這個(gè)問(wèn)題,本系統(tǒng)中創(chuàng)建了接收線程,專門(mén)用來(lái)處理Winsock接收數(shù)據(jù)過(guò)程中的線程占用問(wèn)題。系統(tǒng)Winsock程序運(yùn)行時(shí)序圖如圖3所示。
圖3 系統(tǒng)Winsock程序運(yùn)行時(shí)序圖
3.2.1 啟動(dòng) Winsock
由于Winsock的服務(wù)是以動(dòng)態(tài)鏈接庫(kù)Winsock DLL形式實(shí)現(xiàn)的,因此必須先調(diào)用WSAStartup函數(shù)對(duì)Winsock DLL進(jìn)行初始化[12],獲取Winsock的版本支持,并分配必要的資源。程序編寫(xiě)需要包含頭文件:Winsock2.h;需要包含庫(kù)文件:ws2_32.lib。具體實(shí)現(xiàn)代碼如下所示:
本程序關(guān)閉前,調(diào)用WSACleanup函數(shù)中止對(duì)Winsock DLL的使用,釋放資源以備下次使用。
3.2.2 套接字程序設(shè)計(jì)
1)創(chuàng)建套接字。本系統(tǒng)初始化Winsock的動(dòng)態(tài)鏈接庫(kù)后,需要在服務(wù)器端建立一個(gè)監(jiān)聽(tīng)的套接字,服務(wù)進(jìn)程調(diào)用socket()函數(shù)建立監(jiān)聽(tīng)的套接字listen-Socket,并定義此套接字所使用的通信協(xié)議。socket()函數(shù)原型如下:
SOCKET socket(int af,int type,int protocol)
其中type為表示套接字的類型,af設(shè)定為AF_INET代表套接字在Internet域中進(jìn)行通訊,本系統(tǒng)中的代碼如下:
SOCKETlistenSocket;
//聲明套接字
listenSocket=socket(AF_INET,SOCK_STREAM,0);
//建立面向連接的套接字
2)給listenSocket綁定一個(gè)地址及監(jiān)聽(tīng)使用的端口,可以確定客戶端在連接服務(wù)器時(shí)使用的端口號(hào)。為此要使用bind()函數(shù),bind()函數(shù)原型如下:
int bind(SOCKET s,const Struct sockaddr FAR*name,int namelen)
其中s代表未綁定套接字的對(duì)象名,name代表套接字的地址值,它是由struct sockaddr結(jié)構(gòu)表示,TCP/IP環(huán)境下可以將sockaddr_in結(jié)構(gòu)強(qiáng)制轉(zhuǎn)化為sockaddr機(jī)構(gòu),sockaddr_in原模型如下:
Struct socketaddr_in
{
Short sin_family;
u_short sin_port;
struct in_addr sin_addr;
char sin_zero(8);
}
本系統(tǒng)中的代碼如下:
本系統(tǒng)中客戶端和服務(wù)器端在進(jìn)行交互的過(guò)程中,都是先訪問(wèn)VPN服務(wù)器再將數(shù)據(jù)傳送給對(duì)方,故端口確定為VPN服務(wù)器對(duì)外開(kāi)放端口之一的8888。
3)使用listen()函數(shù)將listenSocket置入監(jiān)聽(tīng)模式并準(zhǔn)備連接請(qǐng)求,通知協(xié)議內(nèi)核用戶進(jìn)程準(zhǔn)備接受連接請(qǐng)求,同時(shí)指定了listenSocket等待的連接數(shù)限制值。Listen()函數(shù)原型如下:
int listen(SOCKET s,int backlog)
其中backlog是待處理的連接隊(duì)列的最大長(zhǎng)度,最大不可以超過(guò)5。本系統(tǒng)中代碼如下:
4)由于listenSocket為阻塞模式,創(chuàng)建接收線程,完成服務(wù)器編程中最重要的一步等待并接受用戶的連接,accept()函數(shù)完成了這個(gè)功能,它從內(nèi)核中取出已經(jīng)建立的客戶端連接,然后把這個(gè)已經(jīng)建立的連接返回給服務(wù)器程序,就可以利用這個(gè)連接進(jìn)行數(shù)據(jù)傳輸了。其函數(shù)原型如下:
int accept(SOCKET s,struct sockaddr FAR*addr,int FAR*addrlen)
該函數(shù)返回一個(gè)新的套接字acceptSocket,該套接字可以用來(lái)與對(duì)方進(jìn)行通信,而原先listenSocket還是處于監(jiān)聽(tīng)狀態(tài)。本系統(tǒng)中部分代碼如下:
在實(shí)際系統(tǒng)中程序使用的接收線程中的變量及聲明的套接字都是使用指針后實(shí)現(xiàn)的。
5)建立客戶端套接字clientSocket。
6)客戶進(jìn)程調(diào)用socket創(chuàng)建客戶端套接字clientSocket,隨后其向服務(wù)器發(fā)送連接請(qǐng)求,軟件通過(guò)connect()函數(shù)完成面向連接協(xié)議的連接過(guò)程,connect()函數(shù)原型如下:
int connect(SOCKET s,const struct sockaddr FAR*name,int namelen)
本系統(tǒng)中代碼如下:
SOCKETclientSocket;
struct sockaddr_inout_serv;
out_serv.sin_family=AF_INET;
out_serv.sin_port=htons(8888);
out_serv.sin_addr.s_addr=inet_addr(ip_x);
clientSocket=socket(AF_INET,SOCK_STREAM,0);
7)當(dāng)連接請(qǐng)求到達(dá)服務(wù)器端時(shí),被阻塞的接收進(jìn)程中的accept()函數(shù)產(chǎn)生一個(gè)新的連接套接字acceptSocket與clientSocket建立連接,并向客戶端返回接收信號(hào)。
8)數(shù)據(jù)發(fā)送。在面向連接的套接字中,不論是客戶端還是服務(wù)器端應(yīng)用都使用send()函數(shù)發(fā)送數(shù)據(jù),其函數(shù)原型如下:
int send(SOCKET s,const char sockaddr FAR*buf,int len,int flags)
其中buf表示要發(fā)送的緩沖數(shù)據(jù),len表示緩沖區(qū)的長(zhǎng)度,flag賦值0代表無(wú)特殊行為。本系統(tǒng)中代碼如下:
char send_buf[1600];
send_count=1350;
send(clientSocket,send_buf,send_count,0);
9)數(shù)據(jù)接收??蛻舳撕头?wù)器應(yīng)用程序均是通過(guò)recv()函數(shù)接收數(shù)據(jù),本系統(tǒng)中的接收部分在接收線程中實(shí)現(xiàn),其函數(shù)原型如下:
int recv(SOCKET s,char sockaddr FAR*buf,int len,int flags)
當(dāng)協(xié)議數(shù)據(jù)接收完畢,recv()把a(bǔ)cceptSocket接收緩沖區(qū)中的數(shù)據(jù)拷貝到buf中,其返回值是拷貝數(shù)據(jù)的字節(jié)數(shù),本系統(tǒng)中代碼如下:
int ret=recv(acceptSocket,receive_buf,1350,0);
10)關(guān)閉套接字,使用closesocket()關(guān)閉連接,釋放套接字所占的資源。
3.3.1 系統(tǒng)關(guān)鍵數(shù)據(jù)發(fā)送
隨著以IM與P2P類軟件為代表的高帶寬占用率類軟件的大量出現(xiàn)與普及,但此類軟件的濫用占用了大量的網(wǎng)絡(luò)帶寬,形成了持續(xù)的高突發(fā)流量,嚴(yán)重影響了網(wǎng)絡(luò)的整體性能與QoS[15]。系統(tǒng)通訊軟件需要設(shè)計(jì)針對(duì)不同的帶寬和網(wǎng)絡(luò)傳輸速度情況下的關(guān)鍵數(shù)據(jù)傳輸策略,在窄帶寬和傳輸速率較慢的情況下,通訊軟件將中止大量數(shù)據(jù)發(fā)送業(yè)務(wù),如:檢測(cè)界面和糧情歷史數(shù)據(jù)庫(kù)數(shù)據(jù),系統(tǒng)優(yōu)先保證遠(yuǎn)程測(cè)控的功能。在本系統(tǒng)中通過(guò)設(shè)置定時(shí)器線程O(píng)nTimer(UINT nIDEvent),在進(jìn)行大數(shù)據(jù)發(fā)送的過(guò)程中,接收線程中的recv()函數(shù)的返回值為接收的數(shù)據(jù)量,累加1分鐘后計(jì)算當(dāng)前網(wǎng)速,若低于30kb/s,中止當(dāng)前發(fā)送任務(wù),進(jìn)入等待檢測(cè)狀態(tài)。系統(tǒng)使用網(wǎng)絡(luò)速度監(jiān)測(cè)分析與保證機(jī)制,可以提升網(wǎng)絡(luò)傳輸中關(guān)鍵業(yè)務(wù)數(shù)據(jù)的效率,有效改善了糧情遠(yuǎn)程網(wǎng)絡(luò)的粗放式管理模式。
3.3.2 本地?cái)嗑W(wǎng)重連
網(wǎng)絡(luò)狀態(tài)異常對(duì)于無(wú)人監(jiān)控狀態(tài)下的糧情檢測(cè)系統(tǒng)的穩(wěn)定性影響很大,就需要在網(wǎng)絡(luò)中斷的情況下,要有重連機(jī)制來(lái)保證能續(xù)發(fā)未傳輸?shù)臄?shù)據(jù)。本系統(tǒng)將斷網(wǎng)狀況分為2種:一種是物理斷網(wǎng),如網(wǎng)線脫落或網(wǎng)線斷裂等;另一種是非物理斷網(wǎng),如局域網(wǎng)內(nèi)管理員未授予上網(wǎng)權(quán)限,網(wǎng)絡(luò)運(yùn)營(yíng)商提供網(wǎng)絡(luò)出現(xiàn)故障等。在本軟件中判斷物理斷網(wǎng)使用函數(shù)InternetGetConnectedState()進(jìn)行檢測(cè),需要包含頭文件:Wininet.h,需要包含庫(kù)文件:Wininet.dll其函數(shù)原型為:
BOOL InternetGetConnectedState(LPDWORD lpdwFlags,DWORD dwReserved)
當(dāng)函數(shù)返回值為T(mén)URE時(shí)本地網(wǎng)絡(luò)連接正常,反之不正常。其中l(wèi)pdwFlags返回值的不同代表了不同的網(wǎng)絡(luò)連接狀態(tài),其中0x01代表通過(guò)調(diào)制調(diào)解器連接Internet,0x02表示通過(guò)局域網(wǎng)連接 Internet,0x04使用代理服務(wù)器登錄Internet,0x08使用無(wú)線網(wǎng)卡連接Internet。不同的網(wǎng)絡(luò)連接方式代表不同的網(wǎng)絡(luò)重連的策略,是建立多網(wǎng)重連機(jī)制的重要參考。
本系統(tǒng)對(duì)于檢測(cè)物理性斷網(wǎng)使用IsNetworkAlive()函數(shù),需要包含頭文件:Sensapi.h,需要包含庫(kù)文件:Sensapi.dll。其函數(shù)原型為:
BOOL IsNetworkAlive(DWORD dw)
當(dāng)函數(shù)返回FALSE時(shí),則代表當(dāng)前出現(xiàn)物理性斷網(wǎng)。IsNetworkAlive()函數(shù)相比于InternetGetConnectedState()函數(shù)反應(yīng)網(wǎng)絡(luò)狀況更加及時(shí),但I(xiàn)nternetGetConnectedState()函數(shù)能夠?qū)崿F(xiàn)對(duì)多種網(wǎng)絡(luò)連接狀態(tài)檢測(cè),這二者結(jié)合使用,同時(shí)識(shí)別斷線,然后進(jìn)行網(wǎng)絡(luò)連接的初始化,可以提高系統(tǒng)使用的穩(wěn)定性和可靠性。
基于VPN連接的遠(yuǎn)程檢測(cè)可以提供更高效、更安全、更便捷的糧情檢測(cè)系統(tǒng),同時(shí)使用網(wǎng)絡(luò)狀態(tài)自檢與流量控制等技術(shù)提高了系統(tǒng)在自動(dòng)檢測(cè)狀態(tài)下的適應(yīng)能力。隨著越來(lái)越多的網(wǎng)絡(luò)技術(shù)融入工業(yè)檢測(cè)系統(tǒng),以及政府對(duì)企業(yè)網(wǎng)絡(luò)信息化的大力推進(jìn),安全穩(wěn)定的VPN遠(yuǎn)程連接和可靠糧情檢測(cè)的融合,也將成為糧情檢測(cè)系統(tǒng)的重要發(fā)展方向之一。
[1]劉赟.Winsock技術(shù)在網(wǎng)絡(luò)通信系統(tǒng)中的應(yīng)用[J].西南科技大學(xué)學(xué)報(bào),2013,28(2):88-91.
[2]梁居寶,杜克明,孫忠富.基于3G與VPN的溫室遠(yuǎn)程監(jiān)控系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].中國(guó)農(nóng)學(xué)通報(bào),2011,27(29):139-144.
[3]孟博,王丹華,王雪,等.基于 PPTP-SSH隧道網(wǎng)關(guān)的VPN系統(tǒng)研究與實(shí)現(xiàn)[J].廣西大學(xué)學(xué)報(bào)(自然科學(xué)版),2011,36(1):127-130.
[4]徐春華,王曉寧.智能化糧情監(jiān)控系統(tǒng)的設(shè)計(jì)與研究[J].安徽農(nóng)業(yè)科學(xué),2012,40(23):11913-11916.
[5]肖美華,余立全,肖攀.Socket通信程序模型抽取及可靠性驗(yàn)證[J].計(jì)算機(jī)科學(xué),2012,39(11):102-107.
[6]過(guò)林吉,沈淺.VPN隧道協(xié)議的研究與探討[J].電腦知識(shí)與技術(shù),2010(3):609-611.
[7]李戍,馮振聲,陳建輝.基于VPN的遠(yuǎn)程故障診斷系統(tǒng)[J].火力與指揮控制,2005,30(1):185-186.
[8]閻琦,陳建.關(guān)于VPN技術(shù)的探討[J].渤海大學(xué)學(xué)報(bào)(自然科學(xué)版),2011,32(2):172-175.
[9]王朋濤,張?jiān)?基于ARM9的糧情監(jiān)測(cè)子系統(tǒng)設(shè)計(jì)[J].計(jì)算機(jī)與數(shù)字工程,2010,38(2):39-41.
[10]梅松,李之棠.一種新的高性能VPN系統(tǒng)的模型分析[J].小型微型計(jì)算機(jī)系統(tǒng),2006,27(5):793-797.
[11]曲毅民.C/S模式軟件開(kāi)發(fā)與VP N技術(shù)應(yīng)用[J].信息技術(shù),2005(5):70-72.
[12]高應(yīng)波,蔣朝惠.基于分布式構(gòu)架的VPN系統(tǒng)的方案設(shè)計(jì)[J].微計(jì)算機(jī)信息,2009,25(2):108-110.
[13]王春海,宋濤.VPN網(wǎng)絡(luò)組建案例實(shí)錄[M].北京:科學(xué)出版社,2011.
[14]王占京,張麗諾,雷波.VPN網(wǎng)絡(luò)技術(shù)與業(yè)務(wù)應(yīng)用[M].北京:國(guó)防工業(yè)出版社,2011.
[15]劉曉輝.網(wǎng)絡(luò)服務(wù)器待見(jiàn)與管理[M].北京:電子工業(yè)出版社,2012.
[16]劉曉陽(yáng).嵌入式糧情檢測(cè)系統(tǒng)的研究與應(yīng)用[D].長(zhǎng)沙:湖南大學(xué),2010.
[17]東莉莉.糧情遠(yuǎn)程監(jiān)控系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].西安:西安工業(yè)大學(xué),2010.