Ahora entraremos a la
programación de un minichat que aceptará varias conexiones. El anterior solo
aceptaba una conexión, que era 1 solo servidor con 1 solo cliente, ahora será 1
solo servidor con x número de clientes.
Viendo este código, se podrán
hacer muchas otras aplicaciones similares, éste minichat se puede decir que es
la base para poder crear sistemas de administración, ya sea de cybers, control
de acceso, en el que se involucran varias computadoras clientes.
El minichat en lugar de usar el
puerto 10112 como el anterior, usará el puerto 80 para asegurar de que también
podrá usarse a través de internet.
El código tiene explicación linea
por linea.
En un formulario, que actuará
como menú, se crean los siguientes submenús
Debe verse algo así:
Y entonces programaremos los
menús:
Private Sub mcliente1_Click()
cliente.Show
'llama al formulario "cliente2"
End Sub
Private
Sub mcliente2_Click()
cliente2.Show 'llama al formulario "cliente2"
End Sub
Private
Sub salir_Click()
Unload Me
End Sub
Private
Sub servidor1_Click()
servidor.Show 'llama al formulario "servidor"
End Sub
Entonces creamos un nuevo
formulario que se llame “servidor”, al cual le agregaremos:
-
1 listbox
-
2 textos (text2 y text1)
-
1 botón de comando (command2), en caption “Enviar”
-
3 etiquetas (label1, label2, label5), label1 en caption
“Estado”, label5 en caption “Mi ip es:”
-
1 timer (timer1), timer1 en interval = 1
-
1
winsock(winsock1), winsock1 en index = 0
Ahora coloca el siguiente código
fuente
Public
contador_conexiones As Integer
Private
Sub Delay(lngCentSeg As Long)
Dim TimeEnd As Single
TimeEnd = Timer + lngCentSeg / 100
Do While TimeEnd > Timer
DoEvents
Loop
End Sub
Private
Sub Command2_Click()
Dim enviar As String
enviar = Text2.Text
Dim c As Integer
c = 1
'Ciclo para enviar datos a todos los clientes
While c <
contador_conexiones
Call Delay(1)
If
Val(Winsock1(c).State) = 7 Then 'Si la conexión está establecida con el cliente
Winsock1(c).SendData enviar 'Enviamos datos al cliente
End If
c = c + 1
Wend
List1.AddItem
"yo: " & enviar ' Imprimimos en nuestra pantalla el mensaje
mandado
Text2.Text = ""
End Sub
Private
Sub Form_Load()
Winsock1(0).LocalPort = 80 'Establecemos el puerto que se
usará
Winsock1(0).Listen 'Pone a la escucha el winsock principal
contador_conexiones = 1
Text1.Text =
Winsock1(0).LocalIP ' Obtenemos la ip de nuestra computadora
End Sub
Private
Sub Timer1_Timer()
If Winsock1(0).State = 2 Then 'Si el winsock está a la
espera de conexiones
Label2.Caption
= "Esperando una solicitud de conexión"
End If
If List1.ListCount > 0 Then
List1.ListIndex = List1.ListCount - 1 'Se selecciona el
último mensaje recibido
End If
End Sub
Private
Sub Winsock1_ConnectionRequest(Index As Integer, ByVal requestID As Long)
Load Winsock1(contador_conexiones) 'Se crea un nuevo winsock en el vector
Winsock1(contador_conexiones).Close 'Se cierra el winsock creado
Winsock1(contador_conexiones).Accept requestID 'El winsock creado acepta
la conexión entrante
contador_conexiones = contador_conexiones + 1 'Aumentamos nuestra
variable de conexiones
End Sub
Private
Sub Winsock1_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Dim datos As String
Winsock1(Index).GetData
datos 'Obtenemos los datos que haya enviado x cliente
List1.AddItem
Winsock1(Index).RemoteHost & datos 'Ponemos en pantalla el mensaje recibido
End Sub
Ahora crea un nuevo formulario el
cual se llamará “cliente”, al cual le agregarás:
-
1 listbox
-
2 etiquetas (label1, label3), label1 en caption “IP”,
label3 en caption “Mi IP es:”
-
3 textos (text2, text3, text1)
-
2
botones de comando (command2, command1), command2 en caption “Enviar”, command1
en caption ”Conectar ”.
-
1
winsock (winsock1)
-
1
timer (timer1), timer en interval = 30
Ahora agrega el siguiente código:
Private
Sub Command1_Click()
If Command1.Caption = "Conectar"
Then
Winsock1.Connect Text3.Text, 80 'Conectamos mediante el
puerto 80
Else
Unload Me 'Cerramos el formulario
cliente.Show
'Lo volvemos a abrir
End If
End Sub
Private
Sub Command2_Click()
If Winsock1.State = 7 Then 'Si la conexión está
establecida
Dim enviar As String
enviar = Text2.Text
Winsock1.SendData Winsock1.LocalHostName & ":
" & enviar 'Enviamos un mensaje como el siguiente:
nombre_computadora:mensaje
List1.AddItem
"yo" & ": " & enviar 'Imprimimos en nuestra propia
pantalla el mensaje enviado
Text2.Text =
""
Else
MsgBox
("Error, al enviar mensaje") 'Se manda un mensaje de error si la
conexión no está establecida
End If
End Sub
Private
Sub Form_Load()
Text1.Text = Winsock1.LocalIP 'Obtenemos nuestra propia
IP
End Sub
Private
Sub Timer1_Timer()
If Winsock1.State = 7 Then 'Si la conexión está
establecida
Command1.Caption = "Desconectar"
End If
If Winsock1.State = 0 Then 'Si la conexión
está cerrada
Command1.Caption = "Conectar"
End If
If List1.ListCount > 0 Then
List1.ListIndex
= List1.ListCount - 1 'Se selecciona el último mensaje recibido
End If
End Sub
Private
Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim datos As String
Winsock1.GetData
datos 'Obtenemos los datos que haya enviado el servidor
List1.AddItem
"Servidor: " & datos 'Ponemos en pantalla el mensaje recibido
End Sub
Crea un nuevo formulario, que se
llamará “cliente2”, y haz lo mismo que en el cliente1.
Ahora procedemos a ejecutar
nuestro programa, y se debe ver de la siguiente manera:
Te recordamos que este y otros códigos fuente, los puedes obtener de:
No hay comentarios.:
Publicar un comentario