作者簡介:蔣力(1985-),男,東莞市電子科技學校講師,碩士。研究方向:計算機網(wǎng)絡。
摘要:該文簡要介紹Winsock控件的基礎知識,使用VB編寫實現(xiàn)遠程計算機通信的程序。通過程序的運行,幫助學生學習計算機網(wǎng)絡中本機IP地址、回環(huán)地址、廣播地址以及端口號的概念。
關(guān)鍵詞:Winsock;IP地址 ;端口號
中圖分類號:G712文獻標識碼:A文章編號:1005-1422(2014)06-0146-02在計算機網(wǎng)絡學習中, OSI參考模型的抽象七層結(jié)構(gòu)晦澀難懂。本校網(wǎng)絡班學生學習《計算機網(wǎng)絡基礎》之前,已有VB編程基礎設計做基礎,具有一定的編程能力和理解能力。因此本文通過在Visual Basic中利用Winsock控件進行網(wǎng)絡通訊程序的編程,使學生能夠更好地理解IP地址和端口號的概念。
一、Winsock控件基礎
Winsock控件在程序設計時,是可見的。在程序執(zhí)行過程中,雖然隱藏在執(zhí)行的窗體之中,但是它可以為有關(guān)網(wǎng)絡通訊方面的程序設計提供依據(jù)。該控件的使用,使得調(diào)用TCP或UDP網(wǎng)絡服務極為便利。因此,在編寫有關(guān)應用程序時,只需簡單了解TCP通訊協(xié)議和低級的Winsock API調(diào)用方式,學生學習時簡單易懂。
1.TCP協(xié)議
TCP協(xié)議的全名為“傳輸控制協(xié)議(transfer control protocol)”,這是目前在互聯(lián)網(wǎng)上使用的主要協(xié)議,例如http,ftp,SMTP等,都是基于這個面向連接的協(xié)議。因此,當使用TCP協(xié)議連接兩個網(wǎng)絡上的設備時,將可以在它們之間交換希望交換的數(shù)據(jù)。如果正在建立主機端應用程序時,必須指定本機和本機(執(zhí)行應用程序所在的計算機)所用的連接端口號,接著將Winsock控件設置為“監(jiān)聽(listen)”,即可等候遠程客戶端進行調(diào)用與連接。因此,當主機端接收到客戶端調(diào)用并且要求連接的信息時,將會觸發(fā)“要求連接()”的事件,接著進行標準“允許”或是“拒絕”的程序。
一旦主機端與客戶端連接完成之后,將可以開始使用“傳送數(shù)據(jù)(senddata)”方法,將數(shù)據(jù)傳送給對方同時,在數(shù)據(jù)傳達對方的計算機時,將會觸發(fā)對方計算的“接收數(shù)(dataarrival)”事件。此時,可以使用“取得數(shù)據(jù)(getdata)”方法,來去出這些接收到的數(shù)據(jù)。
2.Winsock控件
(1)該次編程中涉及的Winsock的屬性,如下:LocalHostName屬性(本地主機名稱);LocalIP屬性(本地主機IP);LocalPort屬性(本地主機端口);RemoteHost屬性(遠程主機名稱);RemotePort屬性(遠程主機端口);Protocol屬性(Winsock控件)(協(xié)議【TCP、UDP】);Name屬性(控件的名稱);State屬性,返回WinSock控件當前的狀態(tài)。
(2)該次編程需用到的三個方法:Bind,SendData和GetData。
Bind 方法 ,指定用于 TCP 連接的 LocalPort 和 LocalIP。
SendData方法,當連接建立后,要發(fā)送數(shù)據(jù)就可以調(diào)用SendData方法,該方法只有一個參數(shù),就是要發(fā)送的數(shù)據(jù)。
GetData方法,當本地計算機接收到遠程計算機的數(shù)據(jù)時,數(shù)據(jù)存放在緩沖區(qū)中,要從緩沖區(qū)中取出數(shù)據(jù),可以使用GetData方法。
(3)DataArrival事件當建立連接后,接受到了新數(shù)據(jù)就會觸發(fā)這個事件。注意:如果在接受到新數(shù)據(jù)前,緩沖區(qū)中非空,就不會觸發(fā)這個事件。
二、程序的主要設計和代碼
程序的主界面是一個窗體,包含四個文本框控件、兩個命令按鈕和一個LIST控件。四個文本框控件分別用來做監(jiān)聽的端口號、遠端的IP地址和端口號、發(fā)送的內(nèi)容。兩個命令按鈕,分別做監(jiān)聽、發(fā)送命令。LIST控件用來顯示發(fā)送和接受的內(nèi)容。
1.在窗體中添加一個Winsock控件,將其Protocol屬性改為1-sckUDPprotocol。
2.將“發(fā)送”按鈕命名為command1, “監(jiān)聽”按鈕命名為command2,監(jiān)聽端口下的text文本框命名為text1,兩部電腦圖標的Winsock控件命名為wc1,雙擊“監(jiān)聽”按鈕輸入如下程序,
If wc1.State = 1 Or wc1.State = 2 Then
wc1.Close
Command1.Enabled = False
End If
wc1.Bind CInt(Text1.Text)
Command1.Enabled = true
將“IP”右邊的文本框命名為Text3, text屬性改為你的電腦的IP, “端口”右邊的文本框命名為Text4,雙擊“發(fā)送”按鈕,“要發(fā)送的數(shù)據(jù)”下面的文本框命名為Text5,輸入如下代碼:
Dim ff As String
ff = Text4.Text
wc1.RemoteHost = Text2.Text
wc1.RemotePort = Text3.Text
wc1.SendData ff
3.雙擊兩部電腦圖標,從代碼窗口上部選擇DataArrival事件,并輸入如下代碼:
Dim kk As String
wc1.GetData kk
List1.AddItem kk + “發(fā)送者IP:” + wc1.RemoteHostIP,0
開始運行程序。
三、Winsock程序測試
1.使用回環(huán)地址
回環(huán)地址127.0.0.1,被稱為本地回環(huán)地址(Loop back address)。它代表設備的本地虛擬接口,在windows操作系統(tǒng)中也有相似的定義,不安裝網(wǎng)卡前可以ping通本地回環(huán)地址。該程序可以用回環(huán)地址自己給自己發(fā)信息。
2.對方IP地址通信
相互之間發(fā)信息,需用端口號和IP。通過與對方通信,來幫助學生理解傳輸層中端口號的概念。案例:同學A監(jiān)聽端口號9090,同學B監(jiān)聽8080,已知A的IP地址是192.168.1.103,B的IP地址是192.168.1.102,那么A給B發(fā)信息,就需要B監(jiān)聽8080端口,A使用IP地址192.168.1.102發(fā)送信息。如果B給A發(fā)信息,就需要A監(jiān)聽9090端口,B使用IP地址192.168.1.103.
3.廣播地址通信
廣播地址是專門用于同時向網(wǎng)絡中所有工作站發(fā)送信息的地址。在使用TCP/IP 協(xié)議的網(wǎng)絡中,主機標識段host ID 為全1 的IP 地址為廣播地址,廣播分組傳送給host ID段所涉及的所有計算機。
在實際教學中,機房IP地址段192.168.1.0/24的廣播地址為192.168.1.255,發(fā)送端口為8080,所有同學監(jiān)聽8080端口,發(fā)送的信息全部同學可以同時接收。
四、總結(jié)
通過此次實驗,不僅鍛煉了學生的VB編程能力,同時用自己編寫的程序來互相發(fā)送信息,讓學生體驗網(wǎng)絡編程帶來的成就感.幫助學生理解計算機網(wǎng)絡中傳輸層的端口號和網(wǎng)絡層IP地址的相關(guān)概念,同時了解了計算機網(wǎng)絡中回環(huán)地址,本機地址和廣播地址的相關(guān)概念,提高了學生學習計算機網(wǎng)絡的興趣.
參考文獻:
[1]Andrew S.Tanenbau計算機網(wǎng)絡第四版[M].北京:清華大學出版社,2005.
[2]范劍波.Visual Basic網(wǎng)絡程序設計[M].北京:科學出版社,2003.
[3]魯斌,李莉. 網(wǎng)絡程序設計與開發(fā) [M].北京:清華大學出版社,2010.
責任編輯朱守鋰