竇楠
【摘 要】在Visual Basic 6.0 環(huán)境下,利用Winsock控件實(shí)現(xiàn)與遠(yuǎn)程數(shù)據(jù)采集端連接和數(shù)據(jù)傳輸。與傳統(tǒng)數(shù)據(jù)傳輸方法進(jìn)行比較,該方法簡(jiǎn)單且易于實(shí)現(xiàn),并充分利用了網(wǎng)絡(luò)資源。介紹了Winsock控件,結(jié)合示例程序,說(shuō)明了該方法實(shí)現(xiàn)流程。最后通過(guò)實(shí)驗(yàn),證實(shí)該方法進(jìn)行遠(yuǎn)程數(shù)據(jù)傳輸?shù)目煽啃浴?/p>
【關(guān)鍵詞】數(shù)據(jù)傳輸;VB6.0;Winsock控件;協(xié)議
在遠(yuǎn)程數(shù)據(jù)采集和傳輸系統(tǒng)中,傳統(tǒng)的方法有2 種:一是采用RS-485進(jìn)行遠(yuǎn)程控制;二是通過(guò)調(diào)制解調(diào)器進(jìn)入電話線來(lái)實(shí)現(xiàn)遠(yuǎn)程控制,然而這2 種方法都有自己的缺點(diǎn)。這樣一來(lái)就限制了它們的應(yīng)用范圍。
本文介紹了在VB6.0中利用Winsock控件來(lái)實(shí)現(xiàn)服務(wù)器端與遠(yuǎn)程客戶端建立連接并進(jìn)行數(shù)據(jù)傳輸?shù)姆椒ā?/p>
一、基于Winsock控件的遠(yuǎn)程數(shù)據(jù)傳輸
(一) Winsock控件簡(jiǎn)介
Microsoft提供的Winsock控件,是ActiveX控件的一種。在VB中可以將其添加到工具箱中以便使用。在程序運(yùn)行時(shí),Winsock控件是不可見(jiàn)的,但通過(guò)對(duì)其屬性、方法、事件的設(shè)置及應(yīng)用可輕松地實(shí)現(xiàn)計(jì)算機(jī)間的遠(yuǎn)程連接,該控件為用戶提供了訪問(wèn)TCP和UDP網(wǎng)絡(luò)及其方便的途徑,不需要了解低級(jí)Winsock API調(diào)用實(shí)現(xiàn)的細(xì)節(jié)。VB的Winsock控件內(nèi)部幾乎封裝了所有的Internet協(xié)議,以類的形式提供了屬性、方法、事件,使得程序得到了極大的簡(jiǎn)化。
Winsock控件的常用屬性如表1。
(二)傳輸協(xié)議
在使用Winsock控件時(shí),首先要考慮使用什么通信協(xié)議??晒┻x擇的協(xié)議有傳輸控制協(xié)議(TCP)和用戶數(shù)據(jù)報(bào)協(xié)議(UDP),都是位于傳輸層的協(xié)議、使用端口號(hào)來(lái)識(shí)別應(yīng)用程序,區(qū)別在于連接的狀態(tài)。TCP協(xié)議是一個(gè)基于連接的協(xié)議,在收發(fā)數(shù)據(jù)前必須建立連接,并且該連接可靠性強(qiáng),使數(shù)據(jù)無(wú)差錯(cuò)地傳輸,適合有確認(rèn)信息的、重要的、數(shù)據(jù)量大(如聲音和圖像)的文件。UDP協(xié)議是不與對(duì)方建立連接而是直接就把數(shù)據(jù)報(bào)發(fā)送過(guò)去。傳輸速度較快也較便宜,適用于少量數(shù)據(jù)傳送、可靠性
要求不高的文件傳輸。本文中均選用TCP協(xié)議。
(三)遠(yuǎn)程數(shù)據(jù)傳輸系統(tǒng)軟件設(shè)計(jì)
1、遠(yuǎn)程傳輸系統(tǒng)軟件流程
軟件在Visual Basic環(huán)境下開(kāi)發(fā),利用Winsock控件完成客戶端與服務(wù)器端的相互通訊。
創(chuàng)建客戶端程序時(shí),必須知道服務(wù)器端的IP地址(RemoteHost屬性)和服務(wù)器“偵聽(tīng)”的端口(RemotePort 屬性)然后調(diào)用 Connect 方法請(qǐng)求與服務(wù)器連接。
創(chuàng)建服務(wù)器端程序時(shí),必須設(shè)置一個(gè)收聽(tīng)端口(LocalPort屬性)并調(diào)用Listen方法偵聽(tīng)端口,本論文中使用的IP地址為202.205.84.222,使用的端口號(hào)為2020。當(dāng)客戶端請(qǐng)求連接時(shí)就會(huì)發(fā)生ConnectionRequest事件。為了完成連接,可調(diào)用ConnectionRequest事件內(nèi)的Accept方法與客戶端進(jìn)行連接。
連接建立后,雙方就可以相互收發(fā)數(shù)據(jù)。通過(guò)調(diào)用 SendData方法完成數(shù)據(jù)發(fā)送。接收數(shù)據(jù)時(shí)會(huì)觸發(fā)DataArrival事件,調(diào)用DataArrival事件內(nèi)的 GetData方法獲取數(shù)據(jù)。
2、服務(wù)器端程序設(shè)計(jì)
(1)服務(wù)器端窗體加載事件
利用Private Sub Form_Load()加載,并且設(shè)置本地
端口,打開(kāi)偵聽(tīng),獲取并顯示本地狀態(tài)信息。
(2)與客戶端的連接
客戶端發(fā)出連接請(qǐng)求時(shí),觸發(fā)ConnectionRequest事件,并調(diào)用Accept方法完成連接。如果本地有連接,則斷開(kāi),因?yàn)椴荒芡瑫r(shí)接受兩組數(shù)據(jù)
(3)建立連接
利用socks.Accept requestID接收當(dāng)前連接,并顯示遠(yuǎn)程計(jì)算機(jī)名、客戶端IP及遠(yuǎn)程端口名稱等遠(yuǎn)程狀態(tài)信息。
(4) 接收數(shù)據(jù)
當(dāng)客戶端發(fā)送的數(shù)據(jù)到達(dá)時(shí),觸發(fā)DataArrival事件,并調(diào)用GetData方法獲取數(shù)據(jù)
(5)確認(rèn)信息
當(dāng)客戶端數(shù)據(jù)發(fā)送完畢,觸發(fā)SendComplete事件,服務(wù)器端會(huì)將發(fā)送的內(nèi)容回發(fā)作為接收到數(shù)據(jù)的確認(rèn)信息。
1、客戶端程序設(shè)計(jì)
(1)客戶端窗體加載事件
利用Private Sub Form_Load()加載,并且指定欲建立連接的服務(wù)器IP及端口名稱,并隨時(shí)偵測(cè)連接是否成功。
(2)客戶端向服務(wù)器端發(fā)送連接請(qǐng)求
利用Private Sub sockcl_Connect()進(jìn)行偵測(cè),一旦成功連接,便向服務(wù)器發(fā)送客戶端數(shù)據(jù)。
(3)服務(wù)器接收客戶端發(fā)送的數(shù)據(jù)
當(dāng)客戶端端發(fā)送的數(shù)據(jù)到達(dá)時(shí),觸發(fā)DataArrival事件,并調(diào)用GetData方法獲取數(shù)據(jù)。
(4)確認(rèn)信息
二、實(shí)驗(yàn)結(jié)果及分析
(一)實(shí)驗(yàn)環(huán)境描述
實(shí)驗(yàn)中的客戶端是遠(yuǎn)程數(shù)據(jù)采集系統(tǒng),利用單片機(jī)作為主控制芯片,利用各種傳感器采集現(xiàn)場(chǎng)數(shù)據(jù),通過(guò)A/D轉(zhuǎn)換送到單片機(jī)中。單片機(jī)通過(guò)串口與GPRS模塊連接,實(shí)現(xiàn)與移動(dòng)網(wǎng)的連接,再與Internet連接。
(二)實(shí)驗(yàn)結(jié)果及分析
實(shí)驗(yàn)只采用8路差分模擬輸入的3路——AI 6、AI 7、AI 8,因?yàn)榇嬖诟蓴_,固前5路的數(shù)值還有一些誤差。顯示的數(shù)值不表示實(shí)際溫度、濕度值,需經(jīng)過(guò)轉(zhuǎn)換,轉(zhuǎn)換后與實(shí)際測(cè)量值進(jìn)行比較,證實(shí)該方法傳輸數(shù)據(jù)的可
靠性。程序和整個(gè)系統(tǒng)均有待改進(jìn)。
三、結(jié)束語(yǔ)
Winsock是編制各種C/S程序的利器,不僅很好地解決了分散的溫度、濕度遠(yuǎn)程數(shù)據(jù)采集系統(tǒng),并能有效可靠地進(jìn)行傳輸,還能開(kāi)發(fā)聊天程序、搶答系統(tǒng)[9]等。算法具有簡(jiǎn)單性,且易實(shí)現(xiàn)。
參考文獻(xiàn):
[1]葉紀(jì)聽(tīng).基于VB編程實(shí)現(xiàn)網(wǎng)絡(luò)文件數(shù)據(jù)傳遞的實(shí)現(xiàn)[J]. 電腦知識(shí)與技術(shù),2014,22:5235-5239.
[2]陳萍,高騰,劉兆峰,高雪為,詹鵬飛.基于GPRS的熱力管網(wǎng)監(jiān)測(cè)軟件設(shè)計(jì)[J].山東建筑大學(xué)學(xué)報(bào),2011,04:403-406+410.
[3]曹淑華. VB編程實(shí)現(xiàn)微機(jī)的網(wǎng)絡(luò)遠(yuǎn)程喚醒[J].現(xiàn)代電子技術(shù),2010,14:61-63.
[4]陳立定,馮景輝,胥布工.遠(yuǎn)程環(huán)境在線監(jiān)測(cè)系統(tǒng)的設(shè)計(jì)[J].同濟(jì)大學(xué)學(xué)報(bào)(自然科學(xué)版),2010,11:1659-1663.endprint