SheepRustler Ответов: 0

UDP трансляции - проводной и беспроводной локальных сетей вопрос


Я пытаюсь передать сообщение устройствам, которые находятся в проводной сети, используя широковещательную передачу UDP, поскольку мои устройства вернут строковый идентификатор, когда они получат строку "поиск ответа" на порту 30303

Все работает отлично, пока я не включу свой компьютер Wi - Fi- тогда ничего не будет найдено.

У меня есть подозрение, что я либо использую что-то неправильное в своей конечной адресации, либо, возможно, неправильно привязываюсь, поэтому я провел пару дней, исследуя это и пробуя различные методы, но я нахожусь на пределе своих знаний и никуда не добираюсь, поэтому я подумал, что пришло время обратиться за помощью. Ниже приведен код, относящийся к этому:

Я был бы признателен за любые указания, которые помогут мне понять это, спасибо.

Что я уже пробовал:

    Dim bytCommand As Byte() = New Byte() {}
    Dim receiveBytes As Byte() = New Byte() {}
    Dim strReturnData As String = String.Empty 'reply text
    Dim ListenPort As Integer = 12345

Dim udpBroadcast As New UdpClient(ListenPort) 'broadcast

    Dim DiscoveryIP As IPAddress = IPAddress.Parse("255.255.255.255")
    Dim DiscoveryPort As Integer = 30303
    Dim DiscoveryEndpoint As New IPEndPoint(DiscoveryIP, DiscoveryPort)
    Dim DiscoveryMessage As String = "SEEKING REPLY" 'the message to broadcast

    Try
        'Problem is that with Wifi Active it doesnt pick up the ethernet
        'it only seems to broadcast to the first adapter (wifi)

    bytCommand = Encoding.UTF8.GetBytes(DiscoveryMessage  + Chr(13))

        udpBroadcast.EnableBroadcast = True

        udpBroadcast.Connect(DiscoveryEndpoint) 'Create a broadcast to UDP CLIENT

        udpBroadcast.Send(bytCommand, bytCommand.Length) 'send the DISCOVERY command
        udpBroadcast.Close() 'close the port

        Dim udpResponse As New UdpClient(ListenPort)

        udpResponse.Client.ReceiveTimeout = 10000 'set a 10 second timeout for searching '

        ReDim receiveBytes(1000) 'and space for the message,

        Dim RemoteIpEndPoint As New IPEndPoint(IPAddress.Any, DiscoveryPort) 'Socket to listen in on


        'Start listening for reply
        Try
            While True 'There is data to harvest
                receiveBytes = udpResponse.Receive(RemoteIpEndPoint) 'capture replies, it will timeout if nothing to reply from
                strReturnData = strReturnData & Encoding.UTF8.GetString(receiveBytes).Trim & vbCrLf 'convert the byte array into a string
                udpResponse.Client.ReceiveTimeout = 1000 'reset a 1 second timeout for searching
            End While

            udpBroadcast.Close()
            udpResponse.Close()
            udpBroadcast = Nothing
            Return strReturnData '
        Catch ex As Exception 'it drops an exception when the timeout is reached

            udpBroadcast.Close()
            udpResponse.Close()
            udpBroadcast = Nothing

            If strReturnData = String.Empty Then MsgBox("Finished Searching but nothing found.")
            Return strReturnData 'return a NULL
        End Try

        udpBroadcast.Close()
        udpResponse.Close()
        udpBroadcast = Nothing
        Return strReturnData 'return a NULL

    Catch ex As Exception

        udpBroadcast.Close()
        udpBroadcast = Nothing
        MsgBox("Error Searching " & ex.HResult & "," & ex.Message)
        Return strReturnData 'return a NULL
    End Try

MadMyche

Что вам нужно сделать, так это перечислить список сетевых адаптеров и выбрать тот, который вам нужен. Взгляните на эту так называемую тему:
https://stackoverflow.com/questions/2192548/specifying-what-network-interface-an-udp-multicast-should-go-to-in-net/14603966

0 Ответов