Te mando un tutorial que estoy realizando.
Espero que te sirva.
Un saludo...
CLIENTE/SERVIDOR EN TCP/IP
Cuando me conecto a una máquina doy una dirección y un puerto.
Si conecto dos aplicaciones a un mismo puerto las dos aplicaciones podrán hablar.
Usaremos el Microsoft Windsock Control 5.0. es un control que usa los sockets (conexiones punto a punto en un puerto determinado).
Haremos dos aplicaciones:
Servidora:
Añado el control.
Pongo la propiedad Protocol a ockTCPProtocol (esta opción recibe confirmación, el udp no confirma, pero es más rápido).
Winsock1.LocalHostName = Nombre de la máquina
Winsock1.LocalIP = Dirección IP de la máquina a la que me voy a conectar
Winsock1.LocalPort = Nombre del puerto por el que me voy a conectar
Ha de ser un número >1024. Nosotros usaremos el 1066.
Winsock1.Listen = Se pone a la escucha. Espera a que alguien se conecte en el
puerto dado.
Cuando alguien se intenta conectar salta el evento ConnectionRequest. Se le da un requestID totalmente aleatorio.
Winsock1.Close ‘cierra la escucha
Winsock1.Accept requestID ‘acepta la conexión
A partir de ahí hay diálogo.
Winsock1.RemoteHostIP es la dirección IP de la máquina que se intenta conectar con nosotros.
Cuando llegan datos a esta aplicación se da el evento DataArrival.
Dim vtData As String
Winsock1.GetData vtData, vbString ‘toma los datos
vbString es el tipo de datos de vtData.
Después de manejar los datos, si quiero mandar una respuesta, o lo que sea:
Winsock1.SendData vtData ‘manda los datos vtData
NOTA:
Hay diálogo entre 2 máquinas, no entre más.
El parámetro bytesTotal es la cantidad de información que se está recibiendo.
La conexión se cierra cuando uno de los dos cierra la conexión, llamando al método Close. Entonces se da el evento Close.
La otra aplicación hace un Close y a mi se me da el evento Close:
Winsock1.Close ‘yo también cierro
Winsock1.Listen ‘me pongo de nuevo a escuchar
Cliente:
Me conecto con Winsock1.Connect
Cuando acepta la conexión la servidora (con accept) sucede el evento Connect.
La propiedad State nos dice el estado de la conexión:
if Winsock1.State = sckConnected then
Winsock1.SendData InputBox(“Datos”)
else
MsgBox “Sin conexión”
end if
=================================
Si puede programarse, puede imaginarse.
ramon.egido@adecco.es
Programador Senior.
InterActive Development Studio, S.L.