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.
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