在VB中使用UDP協(xié)議

字號(hào):

UDP協(xié)議基礎(chǔ):
    UDP(User Datagram Protocol)是一種無(wú)連接協(xié)議,與TCP操作不同,計(jì)算機(jī)間并不需要建立一個(gè)連接,同時(shí),一個(gè)UDP應(yīng)用可同時(shí)作為應(yīng)用的客戶或服務(wù)器方。
    由于UDP協(xié)議并不需要建立一個(gè)明確的連接,因此建立UDP應(yīng)用要比建立TCP應(yīng)用簡(jiǎn)單得多。在TCP應(yīng)用中,一個(gè)Winsock控制必須明確地設(shè)置成“監(jiān)聽”,而其它Winsock控制則必須使用Connect方法來(lái)初始一個(gè)連接。
    使用UDP協(xié)議,在兩個(gè)Winsock控制間進(jìn)行數(shù)據(jù)的發(fā)送,在連接的兩端必須完成以下三步:
    1.設(shè)置RemoteHost屬性為其它計(jì)算機(jī)的名稱;
    2.設(shè)置RemotePort屬性為第二個(gè)Winsock控制的LocalPort屬性的值;
    3.申請(qǐng)Bind方法。
    通過使用方法Bind,則可將該Winsock控制捆綁到一個(gè)本地端口,以便該Winsock控制使用該端口來(lái)進(jìn)行類似TCP的“監(jiān)聽”功能,并防止其它應(yīng)用使用該端口。
    使用該協(xié)議傳送數(shù)據(jù),首先設(shè)置客戶計(jì)算機(jī)的LocalPort屬性。而作為服務(wù)器的計(jì)算機(jī)僅需要設(shè)置RemoteHost屬性為客戶計(jì)算機(jī)的IP地址或域名即可,并將其RemotePort屬性設(shè)置成客戶計(jì)算機(jī)上的LocalPort屬性即可,然后就可通過申請(qǐng)SendData方法來(lái)開始信息發(fā)送,客戶計(jì)算機(jī)則可在其DataArrial事件中使用方法GetData來(lái)獲取發(fā)送的信息。
    下例具體演示了一個(gè)“談話”應(yīng)用,以允許相互間進(jìn)行實(shí)時(shí)的交談。
    UDP應(yīng)用一:
    建立一個(gè)新標(biāo)準(zhǔn)EXE工程文件,拖放一個(gè)Winsock控制到表單上,添加兩個(gè)文本框到表單上,然后進(jìn)行以下屬性的設(shè)置:
    表單(Form):Name=“frmPeerA” Caption=“UDP Application(1)”
    Winsock控制:Name=“udpPeerA” Protocol=“sckUDPProtocol”
    文本框1(TextBox): Name“txtSend”
    文本框2(TcxtBox): Name=“txtOutput” MultiLine-True ScrollBars=2
    然后打開代碼窗口,分別在相應(yīng)的事件下輸入以下代碼:
    Private Sub Form_Load()
     With udpPeerA
     .RemoteHost=“197.1.1.2” '要連接到的計(jì)算機(jī)名
     .RemotePort=1010 '要連接到的端口號(hào)
     .LocalPort=1011 '該Winsock控制將要使用的本地端口號(hào),便于其它端與該Winsock通訊
     .Bind 1011 '將該Winsock控制綁定到該本地端口
     EndWith
    End Sub
    Private Sub txtSend_Change()
     udpPeerA.SendData txtSend.Text'發(fā)送文本
    End Sub
    Private Sub udpPeerA_DataArrival(ByVal bytesTotal As Long)
     Dim strData As String
     udpPeerA.GetData strData,vbString
     txtOutput.Text = strData
    End Sub
    UDP應(yīng)用二:
    類似建立UDP Server的方法,在表單上添加一個(gè)Winsock控制及兩個(gè)文本框,然后進(jìn)行以下屬性的設(shè)置:
    表單(Form):Name=“frmPeerB” Caption=“UDP Application(2)”
    Winsock控制:Name=“udpPeerB” Protocol=“sckUDPProtoclool”
    文本框1(TextBox):Name=“txtSend”
    文本框2(TextBox):Name=“txtOutput” MultiLine=True ScrollBars=2
    然后輸入以下代碼:
    Private Sub Form_Load()
     With udpPeerB
     .RemoteHost=“197.1.1.2” '要連接到計(jì)算機(jī)的IP地址
     .RemotePort=1011 '要連接到的端口號(hào)
     .LocalPort=1010 '該Winsock控制將使用的本地端口號(hào),便于其它方與之通訊
     .Bind 1010 '將該Winsock控制綁定到該本地端口
     End With
    End Sub
    Private Sub txtSend_Change()
     udpPeerB.SendData txtSend.Text '發(fā)送文本
    End Sub
    Private Sub udpPeerB_DataArrival(ByVal bytesTotal As Long)
     Dim strData As String
     udpPeerB.GetData strData,vbString
    txtOutput.Text=strData
    End Sub
    要運(yùn)行該實(shí)例,打開兩個(gè)Visual Basic的事例,然后分別運(yùn)行這兩個(gè)工程文件即可。若要在不同的機(jī)器上運(yùn)行此兩例,只需要將兩個(gè)工程文件中的RemoteHost改變成相應(yīng)的計(jì)算機(jī)的IP地址或域名即可。