Realizar un BroadCast bajo UDP (Control WinSock)

(BroadCast) Realiza una llamada general a todos los PC que puedan estar conectados a una red. Podemos tener nuestro programa escuchando y atender la llamada de distinta manera. Puede servir para tener solo una ejecución de nuestro programa en toda la red.

Este proyecto realiza las acciones de servidor/cliente, respondiendo a la llamada de otros PC’s y pudiendo el también realizar llamadas. Con este proceso podremos saber dónde y quien está ejecutando nuestro programa, o quien está en red en cada momento.

Este proyecto es operativo, pero por supuesto se le pueden añadir muchas mejoras, por ejemplo, poner un “TimeOut” de respuesta, es decir, esperar durante N segundos los PC que respondan, si tarda algún PC más tiempo del indicado se ignora.

Para realizar este proyecto debes crear un formulario con un botón “Btn_Conexiones” y 2 ListBox llamados “Lst_Pruebas” y “Lst_Conexiones”.

Los dos ListBox sirven para hacer un registro de entradas y conexiones recibidas, solo a carácter informativo.

Option Explicit
Dim Responder As Boolean
Dim IPRemota As String
Dim Salir As Boolean

Private Sub Form_Load()
    ' Se inicia el control Socket
    SocketUDP.Protocol = sckUDPProtocol ' Protocolo UDP
    SocketUDP.LocalPort = 1990  ' Se asigna el puerto de comunicaciones
    SocketUDP.RemotePort = 1991 ' Se asigna el puerto de comunicaciones
    SocketUDP.Bind 1991
    
    ' Se muestra la información de la situación desde donde se ejecuta la aplicación
    Label1.Caption = Usuario
    Label3.Caption = Ordenador
    Me.Caption = Ordenador & " - " & SocketUDP.LocalIP
    Me.Show

    ' Esperamos en un bucle hasta la llamada de otro PC
    Do
        DoEvents
        If Responder Then
            ' Si tenemos que responder, asignameos la IP que ha llamado para hacer una respuesta directa
            ' y le mandamos nuestra IP
            SocketUDP.RemoteHost = IPRemota
            SocketUDP.SendData SocketUDP.LocalIP
            Responder = False
        End If
    Loop Until Salir
End Sub

Private Sub Btn_Conexiones_Click()
    ' Se asigna la dirección IP 255 para realizar el BroadCast, la dirección 255 le indica que tiene que 
    ' dirigirse a todos los puestos de la red
    ' Tienes que asignar la dirección IP de la red "255.255.255.255", para que se dirija a todos los puestos 
    ' y funcione en todas las redes
    ' Si solo quieres limitar la llamada a una red en concreto, por ejemplo, 69.50.3.xxx, debes añadir 255 
    ' al final... 69.50.3.255
    ' o con subtipo 69.50.255.255, etc....
    SocketUDP.RemoteHost = "255.255.255.255"

    ' Vaciamos el control List de las conexiones para comenzar de nuevo
    Lst_Conexiones.Clear
    Lst_Pruebas.AddItem "Enviando llamada UDP ..."

    ' Enviamos un texto para que lo reconozca el resto de los ordenadores como un llamada
    SocketUDP.SendData "UDP"
End Sub

Private Sub Form_Unload(Cancel As Integer)
    ' Salimos del programa saliendo del bucle    
    Salir = True
End Sub

Private Sub SocketUDP_DataArrival(ByVal bytesTotal As Long)
    Dim DatosRecibidos As String
    
    ' Recogemos los datos que ha hecho saltar el evento DataArrival
    SocketUDP.GetData DatosRecibidos, vbString

    ' Nos guardamos la IP que nos ha llamado y representamos la llegada de datos    
    IPRemota = SocketUDP.RemoteHostIP
    Lst_Pruebas.AddItem "Se ha recibido: " & DatosRecibidos & " - " & IPRemota

    ' Si la llamada recibida viene de nuestro propio ordenador la omitimos, sino    
    ' respondemos a la llamada    
    If IPRemota = SocketUDP.LocalIP Then
        Lst_Pruebas.AddItem "NO respondo a mi propia llamada"
    Else
        If InStr(DatosRecibidos, "UDP")  0 Then
            Lst_Pruebas.AddItem "Respondo a la llamada de otro PC"
            Responder = True
        Else
            Lst_Conexiones.AddItem DatosRecibidos & " - " & IPRemota
        End If
    End If
End Sub
Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s