萬 鵬
(天津市科技檔案館 天津 300011)
Windows Sockets控件在網(wǎng)絡通信中的程序?qū)崿F(xiàn)
萬 鵬
(天津市科技檔案館 天津 300011)
Windows Sockets是基于TCP/IP參考模型,應用于微軟Windows系統(tǒng)的網(wǎng)絡編程接口,因其具有開放和支持多協(xié)議的機制而得到了廣泛應用。討論了 Windows Sockets的通信機理及通過 Visual Basic編程實現(xiàn)網(wǎng)絡通信的過程。
TCP/IP參考模型 傳輸層 Windows Sockets Visual Basic 服務器 客戶機
1.1 TCP/IP參考模型簡介
TCP/IP參考模型是Internet的基礎,它定義了電子設備如何接入 Internet,以及數(shù)據(jù)在設備之間傳輸?shù)臉藴?。TCP/IP參考模型將諸多網(wǎng)絡協(xié)議分為 4個層次,由下至上分別是:網(wǎng)絡接口層、網(wǎng)絡層、傳輸層和應用層。所有協(xié)議組成了 TCP/IP協(xié)議簇。層次結(jié)構以及各協(xié)議之間的對應關系如圖1所示。
圖1 TCP/IP參考模型層次結(jié)構與協(xié)議對應關系Fig.1 Hierarchical structure and protocol correspondence of the TCP/IP reference model
1.2 傳輸層協(xié)議選擇
在使用Windows Sockets(簡稱WinSock)控件編程之前,需要選擇合適的TCP/IP傳輸層協(xié)議,如圖1所示,可以選擇TCP協(xié)議或 UDP協(xié)議。兩者的差異主要體現(xiàn)在連接性和可靠性方面。
TCP協(xié)議提供的是面向連接的、可靠的數(shù)據(jù)傳輸?!懊嫦蜻B接”是指在數(shù)據(jù)傳輸之前,收發(fā)雙方需要建立點對點的會話連接,傳輸結(jié)束后需要釋放連接?!翱煽俊笔侵覆扇∠鄳m錯機制,使該協(xié)議具有錯誤校驗功能,如果在傳輸過程中數(shù)據(jù)發(fā)生錯誤或無法到達對方,TCP協(xié)議會嘗試重新發(fā)送數(shù)據(jù)。
UDP協(xié)議提供的是非面向連接的、不可靠的數(shù)據(jù)傳輸。該協(xié)議在數(shù)據(jù)傳輸之前不會建立點對點的會話連接,發(fā)送方只是簡單地向接收方發(fā)送數(shù)據(jù);也沒有糾錯機制來避免數(shù)據(jù)傳輸錯誤或確保數(shù)據(jù)成功到達目的地。
實際操作中,需要根據(jù)網(wǎng)絡環(huán)境以及數(shù)據(jù)的傳輸要求選擇合適的協(xié)議。如果對于數(shù)據(jù)傳輸?shù)目煽匦浴⒖煽啃院屯暾砸筝^高,建議選擇 TCP協(xié)議。如果數(shù)據(jù)連接開銷小,對傳輸效率和靈活性要求較高,UDP協(xié)議應該是合適的選擇。WinSock控件中的Protocol屬性用來設定傳輸層協(xié)議,缺省設置是 TCP協(xié)議。
1.3 WinSock控件簡介
Internet是基于 TCP/IP模型的互聯(lián)網(wǎng)絡,而Windows是現(xiàn)有操作系統(tǒng)中最普及的一種。WinSock是Windows下得到廣泛應用的、開放的、支持多種協(xié)議的網(wǎng)絡應用程序編程接口(API)。目前,WinSock API已成為基于TCP/IP網(wǎng)絡環(huán)境中Windows編程事實上的標準,為編程人員在 Windows平臺上開發(fā)通用和規(guī)范的網(wǎng)絡應用程序提供了極大的方便。
1.4 基于Visual Basic的WinSock應用
Visual Basic(簡稱VB)是目前使用最廣泛的編程語言之一,其簡單易學的語言、結(jié)構化的程序設計思想、可視化的編程手段以及事件驅(qū)動的編程機制,使得在 Windows環(huán)境下編寫應用程序變得非常容易。利用它,用戶僅僅設置幾個與控件有關的屬性及引用與幾個控件有關的方法即可實現(xiàn) WinSock系統(tǒng)調(diào)用所完成的功能,極大地方便了用戶在基于 TCP/IP協(xié)議的網(wǎng)絡上開發(fā)網(wǎng)絡通信程序。
WinSock控件采用的是客戶機/服務器模式(Client/Server,簡稱 C/S)。此模式包括客戶機和服務器程序,客戶機向服務器發(fā)出服務請求,服務器偵聽到客戶機的請求后對客戶機作出應答。
2.1 主要屬性
Text:設置控件中顯示的文本內(nèi)容;
Protocol:返回或設置使用的傳輸協(xié)議類型(TCP或UDP,默認為TCP);
Local Host Name:返回本機名字;
Local IP:返回本機IP地址;
Local Port:返回或設置偵聽端口;
Remote Host:返回或設置遠程主機名或IP地址;
Remote Host IP:返回或設置遠程主機IP地址;
Remote Port:返回或設置遠程主機端口;
State:返回控件當前的狀態(tài)。
2.2 主要方法
Accept:通過接收 request ID 參數(shù)的方式,使服務器接收一個客戶機的連接請求;
Close:關閉當前連接;
Listen:使服務器程序處于偵聽狀態(tài);
Connect:向遠程主機發(fā)送連接請求;
Get Data:接收遠程主機發(fā)來的數(shù)據(jù);
Send Data:向遠程主機發(fā)送數(shù)據(jù)。
2.3 主要事件
Load:當前窗體載入時觸發(fā)的事件;
Click:單擊鼠標鍵時觸發(fā)的事件;
Connect:當一個連接完成時觸發(fā)的事件;
Connection Request:客戶機向服務器發(fā)送請求時觸發(fā)的事件,該事件生成一個參數(shù) request ID,通常與 Accept方法一同使用,用來接收客戶機的連接請求;
Data Arrival:有數(shù)據(jù)到達時觸發(fā)的事件,通常與Get Data方法一同使用,用來獲取到達的數(shù)據(jù);
Close:遠程主機關閉連接時觸發(fā)的事件。
3.1 服務器功能的實現(xiàn)
3.1.1 服務器控件設計
① Command1:退出按鈕;
② Command2:設置偵聽端口按鈕;
③ Command3:發(fā)送按鈕;
④ Textlclport:設置偵聽端口文本框;
⑤ Textlclip:顯示本地ip地址文本框;
⑥ Textsend:發(fā)送文本框;
⑦ Textget:接收文本框;
⑧ Winsockserver:服務器 Winsock。
3.1.2 服務器程序代碼
3.2 客戶機功能的實現(xiàn)
3.2.1 客戶機控件的設計
① Command1:退出按鈕;
② Command2:連接按鈕;
③ Command3:設置服務器IP按鈕;
④ Command4:設置服務器偵聽端口按鈕;
⑤ Command5:發(fā)送數(shù)據(jù)按鈕;
⑥ Textrmtip:遠程服務器IP文本框;
⑦ Textrmtport:遠程服務器偵聽端口文本框;
⑧ Textsend:發(fā)送文本框;
⑨ Textget:接收文本框;
⑩ Winsockclient:客戶機 Winsock。
3.2.2 客戶機程序代碼
以上程序?qū)嵗肳inSock控件,采用客戶機/服務器模式,實現(xiàn)了 2臺主機之間的數(shù)據(jù)通信。該程序可以運行于企事業(yè)單位內(nèi)部局域網(wǎng),也可以在Internet環(huán)境下使用,為企事業(yè)單位員工的信息溝通搭建一個可靠、穩(wěn)定的服務平臺。
[1] 卞志強. Visual Basic網(wǎng)絡程序設計[M]. 北京:人民郵電出版社,2003.
[2] 苗長云. 現(xiàn)代通信原理及應用[M]. 2版. 北京:電子工業(yè)出版社,2009.
[3] 邵志方. 基于WinSock控件的網(wǎng)絡程序設計[J]. 無線互聯(lián)科技,2013(4) :116.
[4] 俞時權,呂智慧. 在 TCP/IP協(xié)議支撐之上的Windows Socket應用開發(fā)[J]. 計算機應用與軟件,2000(8):1-8.
Programme Implementation of Windows Sockets in Network Communication
WAN Peng
(Tianjin Archives of Science and Technology,Tianjin 300011,China)
The Windows Sockets specification defines an API for Microsoft Windows based on the TCP/IP reference model. It is widely applied due to its open and multi-protocol supporting mechanism. The paper discussed the communication mechanism of Windows Sockets and the process of network communication implementation through Visual Basic programming.
TCP/IP reference model;transport layer;Windows Sockets;Visual Basic;server;client
TP311.1
A
1006-8945(2014)11-0013-03
2014-10-10