En esta entrada, aprenderemos como programar una chat cliente/servidor, con el cuál daremos nuestros primeros pasos con las funciones de red que nos proporciona visual basic 6, a través de su control Winsock.
Configurando el sistema servidor
Este sistema servidor será el
servidor para un chat entre cliente y servidor (Programa 02)
Antes debemos saber lo siguiente:
Listen
Pone a la aplicación en espera de una conexión
de un cliente, cuando el winsock recibe un intento de conexión, se produce el
evento connectionRequest, entonces en este método se debe llamar al evento
Accept para aceptar la conexión entrante. Se hace notar que un winsock solo
pude aceptar una conexión, o sea sería conexión de computadora a computadora.
No es muy común que nosotros querramos hacer aplicaciones en las que nuestro
servidor solo atienda a una computadora cliente, sino que atienda a varias. Para
hacer que nuestro servidor acepte a varias conexiones a la vez, lo que hacemos
es establecer un winsock principal totalmente a la espera, y que éste al
recibir una conexión entrante cargue otro winsock y le asigne la nueva
conexión, mientras nuestro winsock principal sigue recibiendo más conexiones y
asignándolas a nuevos winsocks.
El winsock original debe
establecerse su propiedad index = 0 para
que este winsock sea el inicial de un vector de winsocks. Cada winsock nuevo
que éste cree se irá almacenando en el vector.
Winsock original
(esperando conexiones)
|
Winsock creado por el original
(atendiendo cliente 1)
|
Winsock creado por el original
(atendiendo cliente 2)
|
Espacio libre para winsock
|
LocalPort
Propiedad que debe establecerse
en el servidor para que acepte conexiones de los clientes. Es de lectura y
escritura, además está en disponible en tiempo de diseño y ejecución.
Ejemplo: Winsock1.LocalPort
ConnectionRequest
Evento que se activa cuando el
servidor detecta que hay un cliente queriendo conectarse a él. Al aceptar la
conexión con el método Accept, las propiedades RemoteHostIP guarda la IP del
cliente y RemotePort guarda el puerto utilizado por el cliente.
Accept
Esta propiedad es para aceptar la
conexión entrante.
Ejemplo: winsock1.accept
RequestID
Dataarrival
Es cuando el servidor está
recibiendo mensajes del cliente
GetData
Recibe el mensaje que activó a
DataArrival, y lo guarda en una variable y borra lo que se recibió, ya que se
queda almacenado en el buffer del sistema(memoria temporal)
Ejemplo: dim datos as string
Winsock1.GetData datos
SendData
Para mandar mensajes al cliente,
que puede ser texto o código binario, en caso de mandar archivos.
Ejemplo: winsock1.SendData “Mensaje”
State
Propiedad del winsock que nos
permite saber el estado de la conexión, valores que puede devolver:
Valor Constante Estado
0 sckClosed Cerrado
1 sckOpen Abierto
2 sckListening Escuchando
3 sckConnectionPending Conexión pendiente
4 sckResolvingHost Resolviendo Host
5 sckHostResolved Host resuelto
6 sckConnecting Conectando
7 sckConnected Conectado
8 sckClosing Cerrando la conexión
9 sckError Ha detectado un error
Entramos a lo que es el
desarrollo de un sistema servidor, el cual nos ayudará a recibir a un cliente,
y poder chatear con él.
Creamos lo siguiente:
-
5 etiquetas (label1, label2, label3, label4 y label5),
label1 en caption “Esta es mi ip”, label2 en caption “Nombre de mi
computadora”, label3 en caption “Mensaje recibido”, label4 en caption “Escribir
mensaje”, label5 en caption “Estado de la conexión”.
-
5 cuadros de texto
-
3 botones de comando (command1, command2, command3),
command1 en caption “Cual es mi ip ?“, command2 en caption “Cual es
mi nombre“, command3 en caption “Enviar”.
-
1 timer (timer1)
-
1 winsock (winsock1)
Debe quedar mas o menos así:
Primero configuramos la propiedad
“LocalPort” del winsock1 y la ponemos en el puerto “10112”, y el timer en la
propiedad interval establecemos “1”.
Ahora a programar:
Lector: Programa el command1 y command2,
que ya lo hicimos en el ejemplo anterior
Debemos programar el evento LOAD
del formulario:
Private
Sub Form_Load()
Winsock1.Listen ‘El sistema se pone a la espera de
conexiones
End Sub
Programando el command3 “Enviar”,
que sirve para enviar mensajes al cliente
Private
Sub Command3_Click()
Winsock1.SendData Text4.Text 'Envía mensaje al cliente
Text4.Text = ""
End Sub
Programando el evento
ConnectionRequest para saber cuando un cliente se trata de conectar y aceptar
la conexión:
Private
Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
Winsock1.Close ‘cierra el winsock
Winsock1.Accept
requestID ‘Acepta la conexión
End Sub
Programando el evento
DataArrival, para recibir los mensajes del cliente:
Private
Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim datos As String
'Declaramos variable cadena
Winsock1.GetData
datos 'Obtenemos el mensaje recibido y lo pasamos a la variable datos
Text3.Text =
"" 'Limpiamos el text3
Text3.Text =
datos 'Pasamos el mensaje recibido al
text3
End Sub
Programando el timer1, para que
aparezca el estado de conexion al instante.
Private
Sub Timer1_Timer()
If Winsock1.State = 0 Then
Text5.Text = "Conexión cerrada"
End If
If Winsock1.State = 7 Then
Text5.Text = "Conexión establecida"
End If
If Winsock1.State = 8 Then
Text5.Text = "Cerrando la
conexión"
End If
If Winsock1.State = 9 Then
Text5.Text = "Ha ocurrido un error en la conexión"
End If
If Winsock1.State = 2 Then
Text5.Text = "Esperando una conexión"
End If
End Sub
Con esto el sistema servidor está
listo para recibir a un cliente.
Configurando el sistema cliente
Configurando el sistema cliente
Entramos ya de plano a configurar
un sistema cliente que se conectará a un sistema servidor que también haremos,
este sistema funcionará para conectarte al sistema servidor que esté instalado
en la misma máquina que en el sistema cliente, o al sistema servidor que esté
instalado en otra computadora en red o en internet.
Este sistema cliente será el
cliente para un chat entre cliente y servidor (Programa 03)
Antes debemos saber lo siguiente:
Close
Propiedad del winsock que permite
cerrar el control winsock para establecer una nueva conexión, esto siempre se
debe de hacer antes de invocar la propiedad connect.
Ejemplo: winsock1.close
Connect
Propiedad del winsock que permite
establecer una conexión con otro programa, en la misma computadora, en la red,
o en internet.
Ejemplo: winsock1.connect
“148.208.196.5”, 10112
Creamos lo siguiente:
-
4 etiquetas (label1, label2, label3, label4), label1 en
caption “Conectarme a la ip”, label2 en caption “Mensaje recibido”, label3 en
caption “Escribir mensaje”, label4 en caption “Estado de la conexión”.
-
4 cuadros de texto
-
2
botones de comando (command1, command2), command1 en caption “Conectar“,
command2 en caption “Enviar“.
-
1 timer (timer1)
-
1 winsock (winsock1)
Se debe ver
algo como esto:
Configuramos
el timer, en la propiedad interval ponemos un “1”
Programemos el command1 “Conectar”
Private
Sub Command1_Click()
Winsock1.Connect Text1.Text, 10112 ‘Nos conectamos a la ip especificada por
medio del
‘puerto 10112
End Sub
Ahora programamos el control
timer1 con los eventos más destacados
Private
Sub Timer1_Timer()
If Winsock1.State = 0 Then
Text4.Text = "Conexión cerrada"
End If
If Winsock1.State = 7 Then
Text4.Text = "Conexión establecida"
End If
If Winsock1.State = 8 Then
Text4.Text =
"Cerrando la conexión"
End If
If Winsock1.State = 9 Then
Text4.Text =
"Ha ocurrido un error en la conexión"
End If
End Sub
Programando command2 “Enviar”
Private
Sub Command2_Click()
Winsock1.SendData Text3.Text
Text3.Text = ""
End Sub
Programando evento DataArrival
Private
Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim datos As String
'Declaramos variable cadena
Winsock1.GetData
datos 'Obtenemos el mensaje recibido y lo pasamos a la variable datos
Text2.Text =
"" 'Limpiamos el text2
Text2.Text =
datos 'Pasamos el mensaje recibido al
text2
End Sub
Ya con esto podemos intentar
hacer una conexión entre cliente y servidor, por medio de la ip. Si queremos
conectarnos al programa servidor que está en nuestra PC, basta con escribir la
ip “127.0.0.1” y conectar y se hace la conexión.
No hay comentarios.:
Publicar un comentario