none
VB2008 用 Udplient 发送一个广播后如何读取多个回复? RRS feed

  • 问题

  • VB菜鸟请教:

    我想实现的功能是VB 程序向局域网发一个Udp广播, 然后读取返回的响应以确认有多少个设备(服务器)在网上工作。


    我用UdpClient.Send 在局域网发送一个Udp广播后接到两个服务器的回复,用Available属性可以看到收到的字节数(如60Bytes, 每个服务器发出30Bytes)。但为什么用Read去读时只能读到一个服务器的数据包?有时是服务器1,有时是服务器2? 谢谢!
    2009年6月15日 18:21

全部回复

  • 2009年6月17日 0:40
    版主
  • 谢谢回复。代码如下


            Dim udpClient As New UdpClient()

            Dim SendBytes(150), ReadBytes(150), ReadBytes2(150) As Byte
            Dim i As Integer

            udpClient.EnableBroadcast = True

            Dim XportEndPoint As New IPEndPoint(IPAddress.Broadcast, &H77FE)

            Dim XportEndPoint_Re As New IPEndPoint(IPAddress.Any, &H77FE)

     

            SendBytes(0) = 0
            SendBytes(1) = 1
            SendBytes(2) = 0
            SendBytes(3) = &HF6

            Try
                udpClient.Send(SendBytes, 4, XportEndPoint)


                Pause_Time = 100000

                Do While Pause_Time > 0

                    Pause_Time -= 1

                Loop

                If udpClient.Available > 0 Then

                    ReadBytes = udpClient.Receive(XportEndPoint_Re)

                End If

            Catch m As Exception
                MessageBox.Show(m.ToString())
            End Try

     

    今天又试了一下。发现第一次读udpClient.Available 的值是60(接到60个字节),用udpClient.Receive(XportEndPoint_Re)读缓冲区时得到一个服务器的数据,同时再读udpClient.Available 得到的值是30(说明第一个服务器的数据已被读走了?),然后再用udpClient.Receive(XportEndPoint_Re)读缓冲区的数据竟然还是得到同一个服务器的数据。用Wireshark跟踪发现两个服务器都返回数据了。

    2009年6月17日 3:36
  • 看看XportEndPoint_Re是不是变了
    http://feiyun0112.cnblogs.com/
    2009年6月17日 4:16
    版主
  • 谢谢feiyun0112.等一下连上机试一试。

    再请教几个有关问题:

    1。 如果只是ByVal 引用,XportEndPoint_Re 会自己变吗?

    2。 在论坛上看见如果发送广播,Endpoint 要用XportEndPoint As New IPEndPoint(IPAddress.Broadcast, 。。。定义, 如果接受回复要用 As New IPEndPoint(IPAddress.Any。。。。 这种说法对吗?今天试了发送和接收都用XportEndPoint As New IPEndPoint(IPAddress.Broadcast, 。。。好象也没发现问题.

    3。要接收UDP广播的回复, 是否只有UdpClient.Receive一种方法?

    再次感谢

    2009年6月17日 4:39