列出UDP广播中的每个IP

时间:2013-10-17 19:12:05

标签: c# wpf vb.net sockets udpclient

所以我正在构建一个小程序来发送/接收UDP广播。我意识到不建议使用UDP,但我不知道IP地址。

以下是客户发送的内容:

 'Send "Hello Message" to ALL UDPListners

    Public Sub UDPSendHello()

        Dim client As New UDPClient()
        Dim ip As New IPEndPoint(IPAddress.Broadcast, 15000)

        Dim bytes As Byte() = Encoding.ASCII.GetBytes("Hello?")
        client.Send(bytes, bytes.Length, ip)
        client.Close()
    End Sub

对于服务器,我收到消息“hello”并找到如下所示的IP地址:

 'Reciever (Server)

Private ReadOnly udp As New UdpClient(15000)
Public Sub UDPHelloListner()
    udp.BeginReceive(AddressOf Receive, New Object())
End Sub
Private Sub Receive(ByVal ar As IAsyncResult)
    Dim ip As New IPEndPoint(IPAddress.Any, 15000)
    Dim bytes As Byte() = udp.EndReceive(ar, ip)
    Dim message As String = Encoding.ASCII.GetString(bytes)
    If message = "Hello?" Then
        Dim sender As New IPEndPoint(IPAddress.Any, 15000)
        Dim senderRemote As EndPoint = CType(sender, EndPoint)

        My.Settings.clientIPAddress = (ip.AddressFamily.ToString() + ip.Address.ToString)
         MessageBox.Show(My.Settings.clientIPAddress)

       ' ListBox1.Items.Add(My.Settings.clientIPAddress)


    End If

    UDPHelloListner()


End Sub

现在我可以使用MessageBox.Show(My.Settings.clientIPAddress)来显示发送消息的客户端的IP地址。所以上面的工作!

现在如果我有4个这个程序的实例,将上述广播作为客户端。 如何列出运行客户端的4个实例的每个IP?我使用了'ListBox1.Items.Add(My.Settings.clientIPAddress),但它说“调用线程无法访问此对象因为一个不同的线程拥有它。“

1 个答案:

答案 0 :(得分:1)

如果你使用WPF,试试这个:

Dispatcher.Invoke(Sub() ListBox1.Items.Add(My.Settings.clientIPAddress))

如果您使用WinForms:

Invoke(Sub() ListBox1.Items.Add(My.Settings.clientIPAddress))

在这两种情况下,我的意思是你的代码都在Window类中。

相关问题