BroadCast bajo UDP
(Control WinSocket)
Fecha: 10/05/1999 (publicado 26/Nov/99)
Autor: Maverick
(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 tambien realizar llamadas. Con este proceso podremos saber donde y quien esta ejecutando nuestro programa, o quien esta 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 caracter 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
Link al listado (comprimido) que incluyas. (FAQ19.zip 2,25 KB)