entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Error con Multicast VB.NET

Hola un saludo

Hace poco me interesé por la tecnología de redes "MULTICAST" la cual permite a varios equipos enviar y recibir información desde unas direcciones de red especificadas que van desde el rango 224.0.0.0 a 239.255.255.255, ahora conseguí un ejemplo práctico de la siguiente fuente y autoria:
enter link description here

Ahora bien, del proyecto que se puede conseguir en el vídeo anterior, utilizo la aplicación EMISOR-RECEPTOR en dos equipos conectados a la misma red local mediante modem WIFI; llamaremos a un equipo A y a otro B para poder aclarar.

ENLACE AL VIDEO

Una vez conectados desde ambos equipos A,B a la red con la dirección multicast y puerto que se muestran, procedo a enviar un mensaje desde cada equipo A,B; el resultado es que se muestran los mensajes que ellos mismos se mandan pero no el del otro equipo; recalco que en ambos equipos está desactivado el FIREWALL; AHORA BIEN, cuando al equipo digamos A le cambio la dirección a 255.255.255.255, entonces en ése caso el equipo B si recibe lo que se manda desde A, y si ahora a ambos le cambio la dirección a 255.255.255.255, entonces B recibe lo que A le manda y lo que él mismo se manda, mientras que A no recibe de B, A sólo recibe de si mismo.

Ahora quiero saber ¿ Porqué ocurre ésto ?, y si hay algún modo de resolver el inconveniente.
Cada equipo A,B deberia recibir tanto de su contrario como de sí mismo, y al cambiar a la dirección 255.255.255.255, no deberían recibir nada.

En caso de que no desees descargar el proyecto y probarlo por ti mismo, dejo el codigo implementado en el formulario:

Imports System.Net
Imports System.Net.Sockets
Imports System.Text
Imports System.Threading

Public Class Form1
    Dim thdReceiver As Thread
    Dim client As UdpClient
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles ButtonCONECTAR.Click

        ButtonCONECTAR.Visible = False
        CheckForIllegalCrossThreadCalls = False

        thdReceiver = New Thread(New ThreadStart _
        (AddressOf receiverThread))
        thdReceiver.Start()

    End Sub
    Public Sub receiverThread()

        Try
            client = New UdpClient(CInt(TextBoxPUERTO.Text))

            Dim group As IPAddress = IPAddress.Parse(TextBoxIP.Text)
            Dim timeToLive As Integer = CInt(TextBoxTTL.Text)
            Dim port As Integer = CInt(TextBoxPUERTO.Text)
            client.JoinMulticastGroup(group, timeToLive)
            Dim remoteEP As IPEndPoint = New IPEndPoint(group, port)
            Do
                Dim ep As IPEndPoint = Nothing
                Dim buffer() As Byte = client.Receive(ep)
                Dim message As String = _
                System.Text.Encoding.UTF7.GetString(buffer)
                RichTextBox1.Text += ep.ToString.Substring(0, ep.ToString.IndexOf(":")) + vbTab + message + "  " + vbCrLf
            Loop
        Catch ex As Exception
        End Try
    End Sub

    Private Sub Form1_FormClosed(sender As Object, e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed

        If ButtonCONECTAR.Visible = False Then
            client.DropMulticastGroup(IPAddress.Parse(TextBoxIP.Text))
            client.Close()
            thdReceiver.Abort()
            Application.Exit()
        End If

    End Sub

    Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
        Dim ENVIANTEMENSAJES As New UdpClient() ' MENSAJES
        Try
            Dim IP As IPEndPoint = New IPEndPoint(IPAddress.Parse(TextBoxIP.Text), CInt(TextBoxPUERTO.Text)) 'DIRECCION RECEPTOR
            Dim FRASE As String = TextBoxMENSAJE.Text
            Dim MENSAJE As Byte() = Encoding.UTF7.GetBytes(FRASE) 'CODIFICA EN BYTES
            ENVIANTEMENSAJES.Connect(IP) 'SE CONECTA CON EL RECEPTOR
            ENVIANTEMENSAJES.Send(MENSAJE, MENSAJE.Length) 'ENVIA EL MENSAJE
            TextBoxMENSAJE.Text = ""
            TextBoxMENSAJE.Focus()
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub
End Class

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta