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)