Проблема получения и передачи в udpclient - PullRequest
0 голосов
/ 24 августа 2011

У меня есть этот код, который продолжает вызывать у меня две проблемы.

first

Запрошенный адрес недопустим в его контексте

second,он получает трансляцию, которую он посылает, я не хочу этого.Я хочу, чтобы только приложение сервера прослушивания получало широковещательный

код отправки

Dim sendMessage As New structMessage
        sendMessage.Command = Command.IP
        Dim byteData As Byte() = sendMessage.ToByte()
        'Using UDP sockets

        epServer = New IPEndPoint(IPAddress.Any, iCurrUDPPort)

        'sckClientUDP.EnableBroadcast = True
        sckClientUDP.EnableBroadcast = True
        sckClientUDP.BeginSend(byteData, byteData.Length, _
                               CType(epServer, Net.IPEndPoint), _
                                New AsyncCallback(AddressOf sckClientUDP_DataArrival), _
                                Nothing)


        '## if server not found , increment port
        If iCurrUDPPort = iToPort Then
            iCurrUDPPort = iFromPort
        Else
            iCurrUDPPort = iCurrUDPPort + 1
        End If

Код получения

    Private Sub sckClientUDP_DataArrival(ByVal ar As IAsyncResult)
        Try
            Dim remoteEP As EndPoint = Nothing
            sckClientUDP.EndReceive(ar, CType(remoteEP, IPEndPoint))
            'Convert the bytes received into an object of type Data
            Dim recvMessage As New structMessage(byteData)
            'Accordingly process the message received
            Select Case recvMessage.Command
                Case Command.IP
                    ServerIP = recvMessage.IP
                    ServerPort = recvMessage.Port
                    ' try connect here (TCP)
            End Select

            byteData = New Byte(1023) {}

            'Start listening to receive more data from the user
            sckClientUDP.BeginReceive(New AsyncCallback(AddressOf sckClientUDP_DataArrival), Nothing)
        Catch generatedExceptionName As ObjectDisposedException
        Catch ex As Exception
            Debug.Print(ex.Message)
        End Try
end sub

Как мне решить эту проблему?

1 Ответ

1 голос
/ 24 августа 2011

Во-первых, вы должны вещать на фактический IP-адрес подсети, а не на IP-адрес. Любой.

Во-вторых, вы не можете избежать дублирования пакета. Предполагается, что широковещательный сокет принимает тот же пакет, который транслирует. Это часть того, как работает вещание. Вам придется отфильтровать все нежелательные пакеты, сравнив IP-адрес их отправителя с вашим широковещательным IP-адресом, чтобы определить, совпадают ли они.

...