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