2013-10-17 2 views
0

그래서 작은 브로드 캐스트를 보내고 UDP 브로드 캐스트를 수신합니다. 나는 UDP가 권장되지는 않지만 IP 주소를 알지 못한다는 것을 알고 있습니다.UDP 브로드 캐스트의 각 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 

이 지금은 사용할 수 있습니다 : 서버, 내가 "안녕하세요"라는 메시지를 얻을 그래서 같은 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 

: 여기

는 클라이언트가 발송되는 것입니다 MessageBox.Show (My.Settings.clientIPAddress) : 메시지를 보내는 클라이언트의 IP 주소를 표시합니다. 그래서 위의 작품!

이제이 프로그램을 위의 4 개의 인스턴스로 클라이언트로 브로드 캐스트했다면. 클라이언트를 실행중인 4 개의 인스턴스의 각 IP를 어떻게 나열 할 수 있습니까? 'ListBox1.Items.Add (My.Settings.clientIPAddress)'를 사용했지만 "다른 스레드가 소유하고 있기 때문에 호출하는 스레드가이 개체에 액세스 할 수 없습니다"라는 메시지가 표시됩니다.

답변

1

당신이 사용하는 경우 WPF이 시도 :

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

당신이 윈폼을 사용하는 경우 : 난 당신의 코드는 Window 클래스에 있음을 의미하는 두 경우 모두

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

합니다.

+0

감사합니다. Dispatch.Invoke가 무엇을하는지 우리를 봐야 할 것입니다. –

+0

하지만이 작품! –

+0

비 GUI 스레드에서 호출 된 짧은 Receive() 메소드. 이 때문에,이 메소드의 UI 요소의 변경은 thread 세이프가 아닙니다. Dispatcher.Invoke는 GUI 스레드에서 대리자를 호출하므로이 대리자의 모든 수정이 스레드로부터 안전 해집니다. – Deffiss