UDP協議基礎:
UDP(UserDatagramProtocol)是一種無連接協議,與TCP操作不同,計算機間並不需要建立一個連接,同時,一個UDP應用可同時作為應用的客戶或服務器方。
由於UDP協議並不需要建立一個明確的連接,因此建立UDP應用要比建立TCP應用簡單得多。在TCP應用中,一個Winsock控制必須明確地設置成“監聽”,而其它Winsock控制則必須使用Connect方法來初始一個連接。
使用UDP協議,在兩個Winsock控制間進行數據的發送,在連接的兩端必須完成以下三步:
1.設置RemoteHost屬性為其它計算機的名稱;
2.設置RemotePort屬性為第二個Winsock控制的LocalPort屬性的值;
3.申請Bind方法。
通過使用方法Bind,則可將該Winsock控制捆綁到一個本地端口,以便該Winsock控制使用該端口來進行類似TCP的“監聽”功能,並防止其它應用使用該端口。
使用該協議傳送數據,首先設置客戶計算機的LocalPort屬性。而作為服務器的計算機僅需要設置RemoteHost屬性為客戶計算機的IP地址或域名即可,並將其RemotePort屬性設置成客戶計算機上的LocalPort屬性即可,然後就可通過申請SendData方法來開始信息發送,客戶計算機則可在其DataArrial事件中使用方法GetData來獲取發送的信息。
下例具體演示了一個“談話”應用,以允許相互間進行實時的交談。
UDP應用一:
建立一個新標准EXE工程文件,拖放一個Winsock控制到表單上,添加兩個文本框到表單上,然後進行以下屬性的設置:
表單(Form):Name=“frmPeerA”Caption=“UDPApplication(1)”
Winsock控制:Name=“udpPeerA”Protocol=“sckUDPProtocol”
文本框1(TextBox):Name“txtSend”
文本框2(TcxtBox):Name=“txtOutput”MultiLine-TrueScrollBars=2
然後打開代碼窗口,分別在相應的事件下輸入以下代碼:
PrivateSubForm_Load()
WithudpPeerA
.RemoteHost="197.1.1.2"'要連接到的計算機名
.RemotePort=1010'要連接到的端口號
.LocalPort=1011'該Winsock控制將要使用的本地端口號,便於其它端與該Winsock通訊
.Bind1011'將該Winsock控制綁定到該本地端口
EndWith
EndSub
PrivateSubtxtSend_Change()
udpPeerA.SendDatatxtSend.Text'發送文本
EndSub
PrivateSubudpPeerA_DataArrival(ByValbytesTotalAsLong)
DimstrDataAsString
udpPeerA.GetDatastrData,vbString
txtOutput.Text=strData
EndSub
UDP應用二:
類似建立UDPServer的方法,在表單上添加一個Winsock控制及兩個文本框,然後進行以下屬性的設置:
表單(Form):Name=“frmPeerB”Caption=“UDPApplication(2)”
Winsock控制:Name=“udpPeerB”Protocol=“sckUDPProtoclool”
文本框1(TextBox):Name=“txtSend”
文本框2(TextBox):Name=“txtOutput”MultiLine=TrueScrollBars=2
然後輸入以下代碼:
PrivateSubForm_Load()
WithudpPeerB
.RemoteHost="197.1.1.2"'要連接到計算機的IP地址
.RemotePort=1011'要連接到的端口號
.LocalPort=1010'該Winsock控制將使用的本地端口號,便於其它方與之通訊
.Bind1010'將該Winsock控制綁定到該本地端口
EndWith
EndSub
PrivateSubtxtSend_Change()
udpPeerB.SendDatatxtSend.Text'發送文本
EndSub
PrivateSubudpPeerB_DataArrival(ByValbytesTotalAsLong)
DimstrDataAsString
udpPeerB.GetDatastrData,vbString
txtOutput.Text=strData
EndSub
要運行該實例,打開兩個VisualBasic的事例,然後分別運行這兩個工程文件即可。若要在不同的機器上運行此兩例,只需要將兩個工程文件中的RemoteHost改變成相應的計算機的IP地址或域名即可(以上例子在VisualBasic5.0及PWIN97上通過)。->