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