0

だから私は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

サーバーの場合、「こんにちは」というメッセージが表示され、次のように 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)」を使用しましたが、「別のスレッドが所有しているため、呼び出し元のスレッドはこのオブジェクトにアクセスできません」と表示されます。

4

1 に答える 1