36177980 curso para crear aplicaciones en red con visual basic 6

71
CURSO PARA CREAR APLICACIONES EN RED CON VISUAL BASIC 6.0 CUARTA VERSIÓN DEL CURSO Creador del curso: Ing. Martín Campos Quintero Correo de contacto: [email protected] www.sisadmic.tk Este curso se actualiza cada mes, así que si deseas conseguir la última versión Del curso, comunícate conmigo o puedes adquirirlo desde nuestra página de Internet en la opción compra, puedes solicitarlo. Para sugerencias comunícate a mi correo y hazme saber que más cosas te Gustaría que tuviera este curso, para de esta manera irlo mejorando cada vez Más.

Upload: pepe-fonseca

Post on 04-Aug-2015

220 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

CURSO PARA CREAR APLICACIONES EN RED CON VISUAL BASIC 6.0

CUARTA VERSIÓN DEL CURSO

Creador del curso: Ing. Martín Campos QuinteroCorreo de contacto: [email protected]

www.sisadmic.tk

Este curso se actualiza cada mes, así que si deseas conseguir la última versiónDel curso, comunícate conmigo o puedes adquirirlo desde nuestra página de

Internet en la opción compra, puedes solicitarlo.

Para sugerencias comunícate a mi correo y hazme saber que más cosas teGustaría que tuviera este curso, para de esta manera irlo mejorando cada vez

Más.

Page 2: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

Introducción

El control winsock es el control que visual basic nos proporciona para poder realizar nuestras propias aplicaciones cliente - servidor. Con este control podremos realizar programas que se puedan comunicar con otros programas nuestros, en la misma computadora, o incluso en otra computadora (esta es la opción que a la mayoría nos interesa).

Los programas que se pueden realizar con este control son variados, como puede ser un servidor web, un sistema de control de acceso, sistema para cybers, sistema para control de personal, troyanos, sistemas de asistencia remota. En fin programas para buenos propósitos y programas para no muy buenas personas :D . Nosotros nos basaremos en programas para buenos propósitos. Lo más interesante del control winsock, es que además de servir para comunicar nuestras aplicaciones en la misma máquina o en una red local, también nos sirve para comunicar nuestras aplicaciones a través de internet. Con esto te quiero decir que podrás hacer tu propio chat y podrás divertirte usándolo con tus amigos a través de internet, o hacer diversas aplicaciones para trabajar a través de internet.

Cabe destacar que TODAS las aplicaciones que se muestran y que se codifican en este curso funcionan en RED DE AREA LOCAL e igualmente por INTERNET (Un poco más

lentas pero funcionan perfectamente).

Comenzamos con el curso. Y les pido de favor que no cambien ningún crédito en él puesto.

Page 3: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

Primeramente, claro después de haber instalado visual basic. Debemos buscar el control Microsoft winsock control en el menú “proyecto->componentes”, activar su casilla y pulsar el botón “Aceptar”.

El control tiene una apariencia como la siguiente figura, y al agregarlo aparecerá en la barra de controles.

Hecho esto procedemos a realizar nuestra primera aplicación

Page 4: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

Primera aplicación: saber ip y nombre de nuestra computadora (programa 01)

Para esto abrimos visual basic 6.0 y creamos lo siguiente

- 2 etiquetas (label1 y label2), label1 en caption “Esta es mi ip”, label2 en caption “Nombre de mi computadora”

- 2 cuadros de texto (text1 y text2)- 2 botones de comando (command1 y command2), command1 en caption “Cual es

mi ip?”, command2 en caption “Cual es mi nombre”.- 1 winsock (winsock1)

Se debe ver algo como esto:

Hecho esto programemos el command1 “Cual es mi ip?”

Private Sub Command1_Click() Text1.Text = Winsock1.LocalIP ‘Obtiene la ip de la computadoraEnd Sub

Y ahora programemos el command2 “Cual es mi nombre”

Private Sub Command2_Click() Text2.Text = Winsock1.LocalHostName ‘Obtiene el nombre de la computadoraEnd Sub

Y ahora a correr nuestra aplicación y pulsar en los dos botones, y la ejecución debe ser algo como esto:

Page 5: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

Claro la ip que están viendo es la que tenía yo cuando ejecuté el programa, y el nombre que ven es el nombre de mi computadora, el código está muy chico y explicadas sus lineas.

Page 6: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

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.LocalPortConnectionRequest

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 RequestIDDataarrival

Es cuando el servidor está recibiendo mensajes del cliente

Page 7: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

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 datosSendData

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 Cerrado1 sckOpen Abierto2 sckListening Escuchando3 sckConnectionPending Conexión pendiente4 sckResolvingHost Resolviendo Host5 sckHostResolved Host resuelto6 sckConnecting Conectando7 sckConnected Conectado8 sckClosing Cerrando la conexión9 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”.

Page 8: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

- 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 conexionesEnd Sub

Page 9: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

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ónEnd 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 text3End 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 IfEnd Sub

Con esto el sistema servidor está listo para recibir a un cliente.

Page 10: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

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.closeConnect

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)

Page 11: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

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 10112End 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 IfEnd Sub

Page 12: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

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 text2End 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.

Page 13: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

Otras propiedades

BytesReceived

Propiedad de solo lectura que almacena la cantidad de datos recibidos. Está disponible sólo en tiempo de ejecución.Ejemplo: winsock1.BytesReceived

PeekData

Este método es similar a GetData, lo único que varía, es que el GetData elimina los datos recibidos del buffer, y el PeekData no los elimina.

SendProgress

Este método se produce mientras se están enviando datos. Pasa como parámetros los bytes enviados desde la última vez que se activó el evento (bytesEnv) y los bytes que esperan a ser enviados en el buffer de transmisión (bytesRest)

Ejemplo: winsock1_SendProgress (bytesEnv As Long, bytesRest As Long)

SendComplete

Se produce cuando en una operación de envío de datos, se han enviado todos.

Ejemplo: winsock1_SendComplete()

Error

Se produce siempre que ocurre un error en los procesos de segundo plano (por ejemplo, un fallo al conectar o un fallo al enviar o recibir en segundo plano). Pasa como parámetros el código de error, la descripción del error, el scode del error, el origen del error, y un booleano para cancelar o aceptar el que presente un cuadro de dialogo con el aviso de error.

Winsock1_Error(número As Integer, descripción As String, scode As Long, origen As String, archivoAyuda as String, contextoAyuda As Long, cancelarVista As Boolean)

Page 14: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

El código de error puede tomar estos valores:

Constante Valor Descripción

SckOutOfMemory 7 Sin memoriaSckInvalidPropertyValue 380 El valor de la propiedad no es válidoSckGetNotSupported 394 No se puede leer la propiedadSckSetNotSupported 383 La propiedad es de sólo lectura.SckBadState 40006 Protocolo o estado de conexión incorrecto para

La solicitud o la transacción requerida.

SckInvalidArg 40014 El argumento que se pasó a una función no estaba en el formato correcto o en el intervalo especificado.

SckSuccess 40017 CorrectoSckUnsupported 40018 Tipo Variant no aceptado.SckInvalidOp 40020 La operación no es válida en el estado actual.SckOutOfRange 40021 El argumento está fuera del intervalo.SckWrongProtocol 40026 Protocolo erróneo para la solicitud o la

transacción requerida.SckOpCanceled 10004 Se canceló la operación.SckInvalidArgument 10014 La dirección solicitada es una dirección de

multidifusión, pero el indicador no está activado.

SckWouldBlock 10035 El socket es no bloqueante y la operación especificada se bloqueará.

SckInProgress 10036 Se está efectuando una operación de Winsock bloqueante.

SckAlreadyComplete 10037 Se completó la operación. No se están efectuando operaciones bloqueantes.

SckNotSocket 10038 El descriptor no es un socket.SckMsgTooBig 10040 El datagrama es demasiado grande para

el búfer y se truncará.SckPortNotSupported 10043 El puerto especificado no es compatible.SckAddressInUse 10048 Dirección en uso.SckAddressNotAvailable 10049 La dirección no está disponible en la máquina

local.SckNetworkSubsystemFailed 10050 Error en el subsistema de red.SckNetworkUnreachable 10051 El host no puede encontrar la red en este

momento.SckNetReset 10052 Expiró el tiempo de espera de la conexión antes

de establecer SO_KEEPALIVE.SckConnectAborted 10053 La conexión se ha cancelado al sobrepasar el

tiempo de espera o por otro error.SckConnectionReset 10054 La conexión se ha restablecido desde el lado

remoto.SckNoBufferSpace 10055 No hay espacio disponible en el búfer.

Page 15: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

SckAlreadyConnected 10056 El socket ya está conectado.SckNotConnected 10057 El socket no está conectado.SckSocketShutdown 10058 El socket se ha desactivado.SckTimedout 10060 Se ha sobrepasado el tiempo de conexión.SckConnectionRefused 10061 Se ha forzado el rechazo de la conexión.SckNotInitialized 10093 Es necesario llamar primero a WinsockInit.SckHostNotFound 11001 Respuesta autorizada: host no encontrado.SckHostNotFoundTryAgain 11002 Respuesta no autorizada: host no encontrado.SckNonRecoverableError 11003 Errores no recuperables.SckNoData 11004 Nombre válido; no hay registro de datos del

tipo solicitado.

Page 16: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

Validaciones de envío de mensajes y conexión

Para tener un programa muy bien desarrollado y que no cause errores cuando las terminales destino se caigan, debe hacerse una buena validación en el envío de mensajes a terminales, esto es, si no se encuentra activa la terminal, no enviarle ningún tipo de mensajes hasta que esta esté activa. Esto se consigue con la propiedad “state”, tomamos algunos valores de esta propiedad para validar que la máquina esté activa.Los valores que nos interesan de esta propiedad son los siguientes

Valor Constante Estado

0 sckClosed Cerrado7 sckConnected Conectado

Ejemplo de envío de mensaje erroneo:

Winsock1.senddata “Hola como estás”

Este envío de mensaje funciona muy bien cuando la terminal destino está conectada, pero si se desconecta la terminal y mandamos un mensaje a ella, nuestra aplicación se traba. Entonces debemos utilizar la siguiente estructura para que nuestra aplicación no sufra ningún error de este tipo

Ejemplo de envío de mensaje correcto:

If winsock1.state=7 then Winsock1.senddata “Hola como estás”endif

Ahora procedemos a validar la conexión, esto causa error si tenemos un botón de conectar y pulsamos conectar y la aplicación se conecta con el servidor, muy bien hasta ahora, pero que pasa si de casualidad se nos ocurre nuevamente pulsar el botón conectar?, nuestra aplicación sufre un error. Ahora a corregirlo.

Ejemplo de conexión erronea:

Winsock1.connect “192.168.1.6”, 10112

Funciona pero falla con la explicación que te di anteriormente

Ejemplo de conexión correcta:

If winsock1.state<>7 then Winsock1.close Winsock1.connect “192.168.1.6”, 10112endif

Page 17: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

Como crear aplicaciones que aceptan varias conexiones?

Para crear este tipo de aplicaciones, se olvida el concepto 1 a 1 para convertirse en un concepto 1 a muchos, para lograr esto en nuestras aplicaciones, tenemos que pensar de la siguiente manera:

En lugar de hacer que nuestro winsock del servidor reciba una conexión y se cierre:

Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long) Winsock1.Close ‘cierra el winsock Winsock1.Accept requestID ‘Acepta la conexiónEnd Sub

Lo que debemos hacer es que nuestro winsock reciba la petición y cree otro winsock que aloje esa conexión, y él siga esperando más conexiones, esto lo conseguimos de la siguiente forma:

Primero seleccionamos nuestro winsock y en la propiedad index ponemos el valor de “0”, con esto indicamos que será una matriz unidimensional o un vector de winsocks, ahora al recibir una petición de conexión se utiliza este código:

Antes que nada declaramos una variable que va a llevar el conteo de las conexiones establecidas

Public contador_conexiones as integer

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 conexionesEnd Sub

Page 18: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

Minichat que acepta varias conexiones (programa 04)

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

Page 19: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

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 MeEnd 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

Page 20: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

Ahora coloca el siguiente código fuente

Public contador_conexiones As IntegerPrivate Sub Delay(lngCentSeg As Long) Dim TimeEnd As Single TimeEnd = Timer + lngCentSeg / 100 Do While TimeEnd > Timer DoEvents LoopEnd 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 computadoraEnd 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 IfEnd Sub

Page 21: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

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 conexionesEnd 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 recibidoEnd 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

Page 22: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

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 IfEnd 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 IfEnd Sub

Private Sub Form_Load() Text1.Text = Winsock1.LocalIP 'Obtenemos nuestra propia IPEnd 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 IfEnd 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 recibidoEnd Sub

Page 23: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

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:

Page 24: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

Como obtener datos de la base de datos del servidor?

En algunas ocasiones esta es la parte más interesante de los programas cliente – servidor, la capacidad de poder obtener los datos de una base de datos que no está alojada localmente.Esta parte de las aplicaciones cliente – servidor es la más deseada por quienes desean desarrollar aplicaciones de este tipo. Ahora les explicaré la forma de obtener datos, modificarlos, eliminarlos, guardarlos y visualizarlos. Querian más?

Primeramente para guardar datos, el cliente debe enviar un mensaje diciendo al servidor que desea guardar datos, entonces el servidor identifica el mensaje y procede a guardar todos los datos que el cliente le envió junto con dicho mensaje.

enviar_linea = "/guarda_info_docente:" & Text1.Text & "," & Text2.Text & ";”If Winsock1.State = 7 Then Winsock1.SendData enviar_lineaendif

Hago notar que cada campo lo separo por una “coma ( , )” y al último pongo un “punto y coma ( ; )”, esto es para que el servidor identifique en que campo guardar cada dato y cuando el servidor encuentra un “punto y coma” significa que ya no hay nada más que buscar en el mensaje. El servidor busca en el mensaje letra por letra es por esto que se le debe indicar hasta cuando deje de buscar.

If Left(datos, 21) = "/guarda_info_docente:" Then Docentes.recordset.addnew While (Mid(aux, c, 1) <> ",") palabra = palabra & Mid(aux, c, 1) c = c + 1 Wend docentes.Recordset.no_tarjeta= palabra c = c + 1 palabra = "" While (Mid(aux, c, 1) <> ";") palabra = palabra & Mid(aux, c, 1) c = c + 1 Wend docentes.Recordset.nombre = palabra

docentes.UpdateRecord docentes.Refreshendif

Este código es donde el servidor decodifica el mensaje, y guarda los datos, y es lo mismo para modificar información, sólo que en lugar de “addnew”, se coloca “edit”

Page 25: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

Para pedir datos al servidor para visualizarlos, el cliente le hace una petición al servidor:

If winsock1.state = 7 then Winsock1.SendData "/verifica_docente:" & Text1.TextEndif

Entonces el servidor debe hacer una búsqueda en su base de datos y al encontrar al docente mandarle los datos al servidor:

enviar_linea = "/ info_docente:" & base_de_datos.recordset.no_tarjeta & "," & base_de_datos.recordset.nombre & ";”

Y el cliente debe decodificar los datos y mostrarlos en su pantalla.

Puedes ver el código fuente que te incluyo para que te sea más fácil comprender en el “PROGRAMA 05”

Page 26: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

Como puedo bloquear y desbloquear una PC cliente desde el servidor?

Para poder hacer esto, es necesario ejecutar una rutina que cada segundo esté actualizando la pantalla cliente para indicarle que siempre se mantenga al frente sobre cualquier aplicación para que la aplicación cliente esté bloqueando el uso de cualquier programa en la pc en que se encuentra.

Para bloquear o desbloquear el cliente desde el servidor, basta con mandar orden de bloqueo o desbloqueo al cliente, quien reconoce dichas órdenes y procede a ejecutarlas.

Para bloquear tenemos la propiedad del cliente “windowstate” en maximizado, para desbloquear lo ponemos a “normal” y disminuimos el largo y ancho de la pantalla.

Además debemos aplicar a la propiedad “BorderStyle” del formulario a “0-None”

Puedes ver el código fuente que te incluyo para que te sea más fácil comprender en el “PROGRAMA 06”

Page 27: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

Como puedo realizar una conexión ODBC con una base de datos en un servidor?

Las conexiones ODBC son realizadas por el sistema operativo, y se encargan de realizar una conexión entre nuestra máquina y una base de datos que se encuentra en otra computadora. Esta conexión nos facilita que si hacemos una aplicación que funcione en nuestra propia computadora, también podrá funcionar en red, sin programar nada más, sino solo cambiar la dirección donde se encuentra la base de datos.

Ahora veremos la forma de configurar una base de datos con la configuración ODBC y veremos código de ejemplo de cómo utilizar esta conexión.

Antes de comenzar debemos colocar la base de datos en el servidor, en la unidad C. En este caso el PC que utilizamos como servidor fue \\clara o de igual manera también podemos utilizar la dirección IP de la computadora \\192.168.0.1

CONFIGURANDO LA CONEXIÓN

Para esto vamos al panel de control, entramos a herramientas administrativas

Ejecutamos el programa Orígenes de datos (ODBC)

Page 28: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

Se abre una ventanita donde vamos a pulsar el botón “Agregar”

En la siguiente pantalla seleccionamos el controlador que en este caso es Microsoft Access Driver

Page 29: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

Y pulsamos Finalizar

En la siguiente pantalla indicamos en el cuadro nombre del origen de datos y en descripción, la palabra “conexion”, entonces pulsamos el botón “Seleccionar”

Ahora seleccionamos la base de datos “BD_SAD.mdb” que se encuentra en la unidad “C” y pulsamos “Aceptar” y pulsamos el botón “Red”, en el cual indicamos la dirección IP del servidor o el nombre del mismo, seguido de la unidad “C”, que es en la cual se encuentra la base de datos

Page 30: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

Pulsamos “Finalizar” y se establece la conexión. Seguido de esto seleccionamos la base de datos y pulsamos “Aceptar”.

En la pantalla nos muestra ya la base de datos como: “C:\BD_SAD.mdb”, quiere decir que hemos configurado correctamente, pulsamos el botón “Aceptar” y desde ahora podremos hacer uso del sistema.

Nota: El proceso de configuración de la conexión se debe realizar en cada equipo. Y cabe destacar que la unidad C del equipo servidor debe estar compartida, además de que el firewall si es que lo tiene debe configurarse para que permita esta conexión.

Page 31: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

Ahora que hemos configurado nuestra conexión ODBC con la base de datos que se encuentra en el servidor, podemos pasar a hacer una aplicación de ejemplo.

Abre visual basic y un nuevo formulario. Entonces verifica en menú Proyecto -> Referencias que esté de la siguiente manera la ventanita que aparezca, de no ser así, activa los ITEMS.

El principal es Microsoft Remote Data Object 2.0 (o alguna otra versión)

Pantalla del siguiente programa

Page 32: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

El siguiente código fuente nos muestra la conexión entre nuestro programa y el ODBC, donde veremos como consultar, guardar, modificar y eliminar datos.

“PROGRAMA 07”

Private Sub CmdAltas_Click() 'Declaramos las variables que se ocuparán Dim fun Dim cn As rdoConnection Dim en As rdoEnvironment Dim rdoRS As rdoResultset Dim SQL As String Dim duplicado As String Dim qy As New rdoQuery

'Se establece la conexión, como recordamos en dsname debemos poner el nombre 'que indicamos en ODBC el cual fue conexion Set en = rdoEnvironments(0) Set cn = en.OpenConnection(dsname:="conexion", _ Prompt:=rdDriverCompleteRequired)

'Realizamos la consulta con la base de datos donde le indicamos con FROM que 'Busque en la base de datos la tabla carrera y que ahi en esa tabla busque 'el campo clave_carrera. With qy .Name = "BD" .SQL = "Select * from carrera Where clave_carrera = ? " .RowsetSize = 1 Set .ActiveConnection = cn End With

'Indicamos que extraiga todos los registros donde el campo clave_carrera sea 'igual a el valor que indicamos en el combo. SQL = "Select * from carrera Where clave_carrera='" & Combo.Text & "'"

'Se extraen todos los registros Set rdoRS = cn.OpenResultset(Name:=SQL, _ Type:=rdOpenStatic, _ LockType:=rdConcurReadOnly, _ Options:=rdAsyncEnable) 'Si se llegó al final quiere decir que no hay registros encontrados, entonces 'procede a registrarse If rdoRS.EOF = True Then MsgBox ("no hay repetidos")

Page 33: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

'Indicamos la sentencia de introducción de datos a la tabla SQL = "INSERT INTO carrera " & "(clave_carrera,nombre_carrera)" & "VALUES ('" & Combo.Text & "', " & "'" & TextDescripcion.Text & "') "

'Ejecutamos la sentencia With qy .SQL = SQL .LockType = rdConcurLock Set .ActiveConnection = cn End With Set rdoRS = qy.OpenResultset(rdOpenForwardOnly, rdConcurReadOnly) cn.Close en.Close TextDescripcion.Text = "" Combo.Text = "" fun = comboini() Else MsgBox ("si hay registros repetidos") End IfEnd Sub

Private Sub CmdBajas_Click() 'Declaramos las variables que se ocuparán Dim fun Dim cn As rdoConnection Dim en As rdoEnvironment Dim SQL As String Dim qy As New rdoQuery 'Se establece la conexión, como recordamos en dsname debemos poner el nombre 'que indicamos en ODBC el cual fue conexion Set en = rdoEnvironments(0) Set cn = en.OpenConnection(dsname:="conexion", _ Prompt:=rdDriverCompleteRequired)

'Realizamos la consulta con la base de datos donde le indicamos con FROM que 'Busque en la base de datos la tabla carrera y que ahi en esa tabla busque 'el campo clave_carrera. With qy .Name = "BD" .SQL = "Select * from carrera Where clave_carrera = ? " .RowsetSize = 1 Set .ActiveConnection = cn End With

Page 34: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

'Indicamos la sentencia de eliminación de datos a la tabla. SQL = "Delete * From carrera Where clave_carrera='" & Combo.Text & "' " 'Ejecutamos la baja cn.Execute SQL cn.Close en.Close TextDescripcion.Text = "" Combo.Text = "" MsgBox ("Registro Eliminado") fun = comboini()End Sub

Private Sub CmdLimpiar_Click() Combo.Text = "" TextDescripcion.Text = ""End Sub

Private Sub CmdModificaciones_Click() 'Declaramos las variables que se ocuparán Dim fun Dim cn As rdoConnection Dim en As rdoEnvironment Dim rdoRS As rdoResultset Dim SQL As String Dim qy As New rdoQuery

'Se establece la conexión, como recordamos en dsname debemos poner el nombre 'que indicamos en ODBC el cual fue conexion Set en = rdoEnvironments(0) Set cn = en.OpenConnection(dsname:="conexion", _ Prompt:=rdDriverCompleteRequired)

'Realizamos la consulta con la base de datos donde le indicamos con FROM que 'Busque en la base de datos la tabla carrera y que ahi en esa tabla busque 'el campo clave_carrera. With qy .Name = "BD" .SQL = "Select * from carrera Where clave_carrera = ? " .RowsetSize = 1 Set .ActiveConnection = cn End With

'Indicamos la sentencia de actualización de datos a la tabla. SQL = " Update carrera set clave_carrera='" & Trim(CStr(Combo.Text)) & "',nombre_carrera='" & Trim(CStr(TextDescripcion.Text)) & "' Where clave_carrera='" & Trim(Combo.Text) & "' "

Page 35: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

'Ejecutamos la actualización cn.Execute SQL

cn.Close en.Close TextDescripcion.Text = "" Combo.Text = "" fun = comboini()End Sub

Private Sub Combo_Click() 'Declaramos las variables que se ocuparán Dim fun Dim cn As rdoConnection Dim en As rdoEnvironment Dim SQL As String Dim qy As New rdoQuery

'Se establece la conexión, como recordamos en dsname debemos poner el nombre 'que indicamos en ODBC el cual fue conexion Set en = rdoEnvironments(0) Set cn = en.OpenConnection(dsname:="conexion", _ Prompt:=rdDriverCompleteRequired)

'Realizamos la consulta con la base de datos donde le indicamos con FROM que 'Busque en la base de datos la tabla carrera y que ahi en esa tabla busque 'el campo clave_carrera. With qy .Name = "BD" .SQL = "Select * from carrera Where clave_carrera = ? " .RowsetSize = 1 Set .ActiveConnection = cn End With

'Indicamos que extraiga todos los registros donde el campo clave_carrera sea 'igual a el valor que indicamos en el combo. SQL = "Select * from carrera Where clave_carrera ='" & Combo.Text & "'"

'Se extraen todos los registros Set rdoRS = cn.OpenResultset(Name:=SQL, _ Type:=rdOpenStatic, _ LockType:=rdConcurReadOnly, _ Options:=rdAsyncEnable)

'Nos movemos al primer registro extraido, si utilizamos MoveLast nos moveremos 'al último registro de los que se extrajeron. rdoRS.MoveFirst

Page 36: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

TextDescripcion.Text = " " TextDescripcion.Text = rdoRS!nombre_carrera

LabelUnidad.Caption = Combo.Text

cn.Close en.CloseEnd Sub

Function comboini() 'Declaramos las variables que se ocuparán Dim cn As rdoConnection Dim en As rdoEnvironment Dim rdoRS As rdoResultset Dim SQL As String Dim qy As New rdoQuery

'Se establece la conexión, como recordamos en dsname debemos poner el nombre 'que indicamos en ODBC el cual fue conexion Set en = rdoEnvironments(0) Set cn = en.OpenConnection(dsname:="conexion", _ Prompt:=rdDriverCompleteRequired)

'Indicamos que extraiga todos los registros de la tabla carrera. 'El asterisco (*) significa que debe extraer todos los registros SQL = "Select * from carrera"

'Se extraen todos los registros Set rdoRS = cn.OpenResultset(Name:=SQL, _ Type:=rdOpenStatic, _ LockType:=rdConcurReadOnly, _ Options:=rdExecDirect)

'Es limpiado el combo. Combo.Clear

'Si se encontraron registros en la consulta SQL entonces entra If rdoRS.RowCount = -1 Then 'Nos movemos al primer registro encontrado rdoRS.MoveFirst 'Hacemos un ciclo desde el primer registro encontrado hasta el último 'Esto para almacenar en el combo todos los registros. 'EOF significa End Of File, fin del archivo, o sea el final de todos los 'Registros encontrados. While rdoRS.EOF = False

Page 37: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

Combo.AddItem rdoRS!clave_carrera 'Agregamos el registro al combo rdoRS.MoveNext 'Nos movemos al siguiente registro Wend End If

en.Close cn.CloseEnd Function

Private Sub Form_Load() x = comboini()End Sub

Con este programa nos podemos dar cuenta de que manera hacer una conexión ODBC con una base de datos que se encuentra en otra computadora, ya sea en red o por internet.

Page 38: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

Como puedo imprimir datos en una impresora local o en red?

Esto de imprimir es tan sencillo como se escucha, lo primero y más básico es tener ya instalada una impresora local o en red. En sí si la impresora es local o en red, no afecta en nada a nuestras aplicaciones. Lo importante para nosotros es crear una aplicación donde se obtengan los datos de la base de datos del servidor. Después realizar las siguientes pautas.

Paso 1. Crear un formulario con dos etiquetas y dos cuadros de texto y un botón de comando llamado “Imprimir”

Paso 2. Crear un nuevo formulario llamado “form2”

Paso 3. Crear dos etiquetas y dos cuadros de texto, un botón llamado “Seleccionar Impresora”, y un botón llamado “Proceder a impresión” y un CommonDialog llamado “cd”, Y además cambiar el color de fondo(Backcolor) del formulario a color blanco así mismo también las dos etiquetas color de fondo a blanco, como se muestra en la siguiente figura.

Paso 4. Hacer que el form1 llame al form2 al hacer clic en el botón “Imprimir”.

Paso 5. Hacer que el form2 reciba las líneas escritas en el form1.

Paso 6. Programar el botón “Seleccionar impresora” para que nos cargue las impresoras configuradas en el sistema.

Paso 7. Programar el botón de “Proceder a imprimir…” con una simple línea que imprimirá todo el formulario.

Page 39: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

Programando aplicación para imprimir datos en impresora local o en red

“PROGRAMA 08”

En el form1 en el botón de “Imprimir” colocar el siguiente código

Private Sub Command1_Click() Form2.Show Unload MeEnd Sub

En el form2 en el botón de “Seleccionar impresora” colocar el siguiente código

Private Sub Command1_Click() cd.ShowPrinterEnd Sub

En el form2 en el botón de “Proceder a imprimir…” colocar el siguiente código

Private Sub Command2_Click() Printer.Copies = 1 ' Número de copias que se imprimirán 'Indica la posición en que se imprimirá, 1=vertical y 2=horizontal Printer.Orientation = 1 Me.PrintForm 'Comienza a imprimir.End Sub

Si deseas que no aparezcan los botones al imprimir tendrás que hacer que desaparezcan por cerca de 2 segundos con un control Timer.

Page 40: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

Cómo puedo conectarme a una base de datos en Internet desde visual basic?

Para muchos el conectarse a una base de datos que se encuentra en Internet, desde un programa realizado por ellos mismos, les resulta casi imposible. De hecho la mayoría de los programadores crecen pensando en que esto no se puede hacer, ya que en las escuelas jamás nos enseñaron eso, nunca nos dijeron las maravillas que se pueden hacer con los lenguajes de programación, y digo maravillas porque a mí me resultó casi imposible también, pero con un buen de investigación y horas y horas de estar frente a la computadora, me resultó posible y de gran alegría para mi vida, por que ya tenía más de un año queriendo hacerlo. Gracias a la ayuda de varios foros de programación pude lograrlo, aunque solamente me dieron las pautas a seguir, yo logré hacerlo y les comparto mi experiencia. Verán que jamás se arrepentirán de obtener este conocimiento.

Ya te has de estar imaginando, este programa debe ser demasiado pesado ya que para conectarse a bases de datos en Internet se necesitan cientos de líneas de código, lo digo porque una vez descargué un código que hacía una conexión a una base de datos en Internet usando XML y me sorprendí ya que tenía como 1000 líneas de código. Pero algo increíble es que puedes hacer altas, bajas, modificaciones y consultas sólo con 121 líneas de código.

Está bien ya no ahondo más en lo que me pasó y mejor comienzo a explicarles como se hace, y en el siguiente tema lo veremos gráficamente.

Para hacer una conexión a una base de datos en Internet, en la cual es una base de datos MYSQL la que utilizaremos, ya que es una base de datos gratuita. Debemos instalar el software de ODBC para bases de datos MYSQL llamado “mysql-connector-odbc-3.51.12-win32.msi” (que incluyo junto con el código fuente de este ejemplo).

Ya instalado dicho software debemos contratar una base de datos gratuita en un servidor de base de datos MYSQL, porque no estamos dispuestos a gastar más dinero tan solo por aprender a hacer esto por Internet. Para poder realizar nuestro programa debemos entrar a la página de Internet http://www.freesql.org en la cual crearemos nuestra base de datos.

En dicha página creamos nuestra base de datos y añadimos campos, hecho esto comenzaremos a programar nuestra aplicación.

Y para finalizar estaremos más que felices viendo los resultados.

Page 41: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

Creando nuestra base de datos en http://www.freesql.org

Al entrar a dicha página nos aparece la siguiente pantalla

1.- En la parte del menú MYSQL, pulsamos create, y nos aparecerá la siguiente pantalla.

Page 42: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

2.- En dicha pantalla nos pide:

Username: conexiondb (ustedes pueden poner el nombre de usuario que deseen)Database Name: conexiondb (Es el nombre de la base de datos a crear)Email: (Aquí ponen su correo electrónico)Password: conectar (Pueden poner la password que deseen para su cuenta)Confirm Password: conectar (Confirmar la contraseña)Nota: Activar la casilla.

Pulsar el botón “submit”

Page 43: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

Debe aparecer la siguiente pantalla si todo estuvo bien

Lo que está seleccionado dice “your database has been created and is now available”. Esto quiere decir que ya está creada su base de datos.

Ahora debemos crear la tabla y campos en dicha base de datos. Para hacer esto debemos de ir al menú “PhpMyAdmin”, y nos deberá aparecer la siguiente pantalla, donde teclearemos nuestro nombre de usuario y contraseña.

Page 44: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

Hecho esto nos aparecerá la siguiente ventana

En la parte izquierda de la pantalla, donde dice “Base de datos”, desplegamos la lista, y nos deben aparecer las siguientes bases de datos:

La que creamos es la de “conexiondb”, el (0), nos indica que tenemos cero tablas creadas en dicha base de datos.

Para crear una tabla seleccionamos “conexiondb” y damos clic con el botón izquierdo del ratón, hecho esto veremos la siguiente pantalla.

Page 45: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

En esta pantalla ponemos el nombre de la nueva tabla, en este caso pusimos el nombre de “alumnos”, y el número de campos que tendrá son “2”. Pulsamos el botón “Continuar”.

Page 46: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

Vemos la siguiente pantalla

En el primer campo pusimos “numero” Tipo: VARCHAR Longitud Valores: 5En el segundo campo pusimos “nombre” Tipo: VARCHAR Longitud Valores: 50

VARCHAR significa Variable de tipo carácter, que nos indica que todo lo introducido en dicho campo, se guardará como texto.

La longitud de los campos, es la cantidad de información que pueden almacenar.

Pulsamos el botón “Grabar”, y nuestros campos estarán creados. Y listos para usarse.

Page 47: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

Si todo salió bien veremos la siguiente pantalla:

Hecho esto, podemos comenzar a programar nuestra aplicación para que se conecte con dicha base de datos.

Page 48: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

Programando aplicación para conectarse a la base de datos

Primeramente debemos configurar el control con el que accederemos, para esto en Visual Basic, vamos al menú Proyecto -> Referencias. Y activamos las casillas siguientes

Hecho esto creamos un control MsFlexGrid, para esto vamos al menú Proyecto -> Componentes. Y seleccionamos el siguiente control

Page 49: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

Ahora que ya tenemos el control lo insertamos en el formulario, junto con los demás controles, como se ve en la pantalla.

Page 50: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

En el control Flexgrid, modificamos las siguientes propiedades:

Nombre: TablaCols: 2FixedCols: 0FixedRows: 1Rows: 1

En el Timer1, modificamos las siguientes propiedades:Interval: 1000

En el Text1 modificar MaxLength = 5, y Text2 MaxLength = 50

En la parte de declaraciones del programa colocamos el siguiente código

Public Cxn As adodb.ConnectionPublic AdoS As adodb.RecordsetPublic CxnFac As String

Explicación: Creamos las variables que ocuparemos para manipular la base de datos, con el control ADO.

Page 51: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

En el botón “Buscar”, colocamos el siguiente código:

Text2.Text = ""

If AdoS.RecordCount > 0 Then AdoS.MoveFirst enc = 0 While Not (AdoS.EOF) And enc = 0 If AdoS.Fields("numero") = Text1.Text Then enc = 1 Else AdoS.MoveNext End If Wend

If enc = 1 Then Text2.Text = AdoS.Fields("nombre") Command3.Enabled = True Command4.Enabled = True Else MsgBox "El registro no se encontró", vbOKOnly, "Conexión web" End If

Else MsgBox "No existe ningún registro en la base de datos", vbOKOnly, "Conexión web" End If

Explicación: Con la línea “If Ados.RecordCount >0 then”, indicamos que si la tabla tiene registros, entonces entre a la condición.AdoS.Movefirst, le indicamos que se mueva al primer registro.En la línea “While Not (AdoS.EOF) And enc = 0”, indicamos que mientras no sea el último registro de la tabla y la variable enc sea igual a cero, continúe el ciclo.En la línea “If AdoS.Fields("numero") = Text1.Text Then”, indicamos que si el campo numero es igual al texto que se encuentra en el Text1, entonces entre a la condición, donde se marca la variable enc = 1, con lo que se saldría del ciclo, en caso contrario con la línea “AdoS.MoveNext”, nos movemos al siguiente registro de la base de datos.

Page 52: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

Creamos la función “mostrar_datos_en_tabla”

Public Function mostrar_datos_en_tabla() tabla.AddItem "" While tabla.Rows > 2 tabla.RemoveItem 2 Wend c = 2 If AdoS.RecordCount > 0 Then AdoS.MoveFirst While Not (AdoS.EOF) tabla.AddItem "" tabla.TextMatrix(c, 0) = AdoS.Fields("numero") tabla.TextMatrix(c, 1) = AdoS.Fields("nombre") AdoS.MoveNext c = c + 1 Wend End IfEnd Function

Explicación: Con esta función lo que se hace es mostrar los datos en el control MSFlexGrid, que son los campos numero y nombre.

Page 53: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

En el botón “Agregar datos”, colocar el siguiente código:

If AdoS.RecordCount > 0 Then AdoS.MoveFirst enc = 0 While Not (AdoS.EOF) And enc = 0 If AdoS.Fields("numero") = Text1.Text Then enc = 1 Else AdoS.MoveNext End If Wend

If enc = 1 Then MsgBox "Registro existente", vbOKOnly, "Conexión web" Else AdoS.AddNew AdoS.Fields("numero") = Text1.Text AdoS.Fields("nombre") = Text2.Text AdoS.Update MsgBox "Datos almacenados", vbOKOnly, "Conexión web" Text1.Text = "" Text2.Text = "" Call mostrar_datos_en_tabla End If

Else

AdoS.AddNew AdoS.Fields("numero") = Text1.Text AdoS.Fields("nombre") = Text2.Text AdoS.Update MsgBox "Datos almacenados", vbOKOnly, "Conexión web" Text1.Text = "" Text2.Text = "" Call mostrar_datos_en_tabla End If

Explicación: La línea “AdoS.AddNew”, reserva espacio para un nuevo registro en la tabla, registro en el cual los campos numero y nombre le son asignados valores con Text1 y Text2. Antes de esto se hace una búsqueda para ver si el registro que se intenta agregar ya existe.

Page 54: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

En el botón “Eliminar registro”, colocar el siguiente código:

If AdoS.RecordCount > 0 Then AdoS.Delete adAffectCurrent MsgBox "Registro eliminado satisfactoriamente", vbOKOnly, "Conexión web" Else MsgBox "No hay registros a eliminar", vbOKOnly, "Conexión web" End If Text1.Text = "" Text2.Text = "" Command3.Enabled = False Command4.Enabled = False Call mostrar_datos_en_tabla

Explicación: La línea “AdoS.Delete adAffectCurrent” lo que hace es eliminar el registro actual, el registro que estamos viendo actualmente, o sea el registro encontrado, después de pulsar el botón “Buscar”.

En el botón “Modificar datos”, colocar el siguiente código:

AdoS.Fields("numero") = Text1.Text AdoS.Fields("nombre") = Text2.Text AdoS.Update

MsgBox "Datos modificados", vbOKOnly, "Conexión web" Text1.Text = "" Text2.Text = "" Command4.Enabled = False Command3.Enabled = False Call mostrar_datos_en_tabla

Explicación: En este código podemos ver que no se utiliza la línea AddNew, ya que no queremos agregar un nuevo registro, sino modificar el registro actual. Así que solamente asignamos a los campos los nuevos valores de los Text1 y Text2.

Page 55: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

En el botón “Cancelar”, colocar el siguiente código:

Text1.Text = "" Text2.Text = "" Command3.Enabled = False Command4.Enabled = False

En la parte “LOAD” del formulario, colocar el siguiente código:

tabla.ColWidth(1) = 4500 tabla.TextMatrix(0, 0) = "Número" tabla.TextMatrix(0, 1) = "Nombre"

Set Cxn = New Connection Cxn.CursorLocation = adUseClient CxnFac = "Driver={MySQL ODBC 3.51 Driver};Server=www.freesql.org;Port=3306;Option=131072;Stmt=;Database=conexiondb;Uid=conexiondb;Pwd=conectar;" Cxn.Open CxnFac ' Abrimos la conexion Set AdoS = New Recordset AdoS.Open "Select * From alumnos", Cxn, adOpenStatic, adLockOptimistic Call mostrar_datos_en_tabla

Explicación: En este código la línea que más nos debe llamar la atención es: “Driver};Server=www.freesql.org;Port=3306;Option=131072;Stmt=;Database=conexiondb;Uid=conexiondb;Pwd=conectar;"

Ya que esta línea es la que establece la conexión, en Server colocamos la página www.freesql.org , en Port colocamos 3306, en Option colocamos 131072, en Database colocamos el nombre de nuestra base de datos, la cual fue conexiondb, en Uid colocamos nuestro nombre de usuario el cual fue conexiondb, y en Pwd colocamos nuestra contraseña, la cual fue conectar.

Y la siguiente línea también nos interesa “AdoS.Open "Select * From alumnos", Cxn, adOpenStatic, adLockOptimistic”

Dicha línea también nos interesa ya que en esta indicamos la tabla que queremos abrir, que en este caso fue alumnos.

Page 56: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

En el Timer1, colocar el siguiente código:

If AdoS.State = 1 Then Label2.Caption = "Conectado a la base de datos" Else Label2.Caption = "Error en la conexión con la base de datos" End If

Explicación: Si el estado de la base de datos es “1”, quiere decir que la conexión con la base de datos se estableció correctamente.

Colocado todo el código fuente, nuestro programa se conectará a la base de datos que creamos.

Page 57: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

¿Como programar un juego en red?

Para programar un juego en red, se necesitan simples pasos, los cuales son los siguientes:

1. Crear una pantalla de Servidor y una pantalla de cliente. Esto para que el juego pueda sostenerse solo, y no necesite que otro programa actúe como servidor.

2. Establecer la conexión entre el cliente y el servidor.3. Para enviar un comando, se debe enviar una clave, que el programa que lo recibe lo

interpretará como que debe hacer una acción. Antes de realizar dicha acción debe informar al origen, que ya recibió la orden y que procederá a ejecutarla, esto para si el origen desea ejecutar alguna otra acción.

4. Gestionar los posibles eventos en los dos programas: Cliente y servidor. Ya que si el cliente ganó, debe aparecer un mensaje de que ganó y en el programa servidor debe aparecer que perdió.

Page 58: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

Programando el juego del gato en red

Primeramente debemos crear los siguientes controles:- 9 botones de comando que serán el tablero del juego, los cuales estarán dentro de un

frame, llamado frame2.- Un frame y dentro de él dos botones de opción y textos para gestionar puertos y

conexiones a IP. Además de botones de comando para aceptar y para cancelar.

Debe ser tal como se muestra en la figura. Puede basarse en el código fuente proporcionado para que sepa bien qué es lo que debe hacer.

En la parte “LOAD” del formulario, colocar el siguiente código:

Option1.Value = True

Explicación: Establecemos que la opción 1 aparecerá elegida por default.

Page 59: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

En el botón Option1, colocar el siguiente código:

If Option1.Value = True Then Label2.Visible = False Text2.Visible = False Text3.Visible = False Label4.Visible = False Command11.Visible = False Label1.Visible = True Text1.Visible = True Command10.Visible = True Text4.Text = "X" End If

Explicación: Indicamos que se activen los controles correspondientes al servidor.

En el botón Option2, colocar el siguiente código:

If Option2.Value = True Then Label2.Visible = True Text2.Visible = True Text3.Visible = True Label4.Visible = True Command11.Visible = True Label1.Visible = False Text1.Visible = False Command10.Visible = False Text4.Text = "O" End If

Explicación: Indicamos que se activen los controles correspondientes al cliente.

En el botón “OK”, de servidor, colocar el siguiente código:

Winsock1.LocalPort = Text1.Text Winsock1.Close Winsock1.Listen Frame1.Enabled = False Frame2.Enabled = True Command12.Visible = True

Explicación: Ponemos el juego a la espera de conexiones

Page 60: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

En el botón “OK”, de cliente, colocar el siguiente código:

Winsock1.Connect Text2.Text, Text3.Text Frame1.Enabled = False Command12.Visible = True

Explicación: Con este código se establece la conexión Cliente a Servidor.

En el botón “X” colocar el siguiente código:

Winsock1.Close Command12.Visible = False Frame1.Enabled = True Text1.Text = "" Text2.Text = "" Text3.Text = ""

Explicación: En este código la conexión entre cliente y servidor es cerrada.

En el control Winsock1, en el evento ConnectionRequest, colocar el siguiente código:

Winsock1.Close Winsock1.Accept requestID

Explicación: El servidor acepta la conexión entrante.

En el control winsock, en el evento DataArrival, colocar el siguiente código:

Dim datos As String Winsock1.GetData datos If datos = "1" Then Winsock1.SendData "recibido1" Frame2.Enabled = True If Text4.Text = "O" Then Command1.Caption = "X" Else Command1.Caption = "O" End If End If If datos = "recibido1" Then Command1.Caption = Text4.Text Frame2.Enabled = False End If

Page 61: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

If datos = "2" Then Winsock1.SendData "recibido2" Frame2.Enabled = True If Text4.Text = "O" Then Command2.Caption = "X" Else Command2.Caption = "O" End If End If If datos = "recibido2" Then Command2.Caption = Text4.Text Frame2.Enabled = False End If If datos = "3" Then Winsock1.SendData "recibido3" Frame2.Enabled = True If Text4.Text = "O" Then Command3.Caption = "X" Else Command3.Caption = "O" End If End If If datos = "recibido3" Then Command3.Caption = Text4.Text Frame2.Enabled = False End If If datos = "4" Then Winsock1.SendData "recibido4" Frame2.Enabled = True If Text4.Text = "O" Then Command4.Caption = "X" Else Command4.Caption = "O" End If End If If datos = "recibido4" Then Command4.Caption = Text4.Text Frame2.Enabled = False End If

Page 62: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

If datos = "5" Then Winsock1.SendData "recibido5" Frame2.Enabled = True If Text4.Text = "O" Then Command5.Caption = "X" Else Command5.Caption = "O" End If End If If datos = "recibido5" Then Command5.Caption = Text4.Text Frame2.Enabled = False End If If datos = "6" Then Winsock1.SendData "recibido6" Frame2.Enabled = True If Text4.Text = "O" Then Command6.Caption = "X" Else Command6.Caption = "O" End If End If If datos = "recibido6" Then Command6.Caption = Text4.Text Frame2.Enabled = False End If If datos = "7" Then Winsock1.SendData "recibido7" Frame2.Enabled = True If Text4.Text = "O" Then Command7.Caption = "X" Else Command7.Caption = "O" End If End If If datos = "recibido7" Then Command7.Caption = Text4.Text Frame2.Enabled = False

Page 63: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

End If If datos = "8" Then Winsock1.SendData "recibido8" Frame2.Enabled = True If Text4.Text = "O" Then Command8.Caption = "X" Else Command8.Caption = "O" End If End If If datos = "recibido8" Then Command8.Caption = Text4.Text Frame2.Enabled = False End If If datos = "9" Then Winsock1.SendData "recibido9" Frame2.Enabled = True If Text4.Text = "O" Then Command9.Caption = "X" Else Command9.Caption = "O" End If End If If datos = "recibido9" Then Command9.Caption = Text4.Text Frame2.Enabled = False End If

Explicación: En data arrival, llegan todos los datos que se reciben y es aquí donde los procesamos.

Page 64: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

Y por último en el Timer1, colocar el siguiente código:

If Option1.Value = True And Winsock1.State = 2 Then Label3.Caption = "Puerto " & Winsock1.LocalPort & " abierto" End If If Option1.Value = True And Winsock1.State = 7 Then Label3.Caption = "Conexión recibida y aceptada. Conexión establecida" End If If Option2.Value = True And Winsock1.State = 7 Then Label3.Caption = "Conexión establecida con la IP: " & Winsock1.RemoteHostIP End If If Not (Option1.Value = True And Winsock1.State = 2) And Not (Option2.Value = True And Winsock1.State = 7) And Not (Option1.Value = True And Winsock1.State = 7) Then Label3.Caption = "" End If If Len(Command1.Caption) > 0 And Len(Command2.Caption) > 0 And Len(Command3.Caption) > 0 And Len(Command4.Caption) > 0 And Len(Command5.Caption) > 0 And Len(Command6.Caption) > 0 And Len(Command7.Caption) > 0 And Len(Command8.Caption) > 0 And Len(Command9.Caption) > 0 Then limpiar MsgBox "Juego sin ganador", vbOKOnly, "Juego del gato en red" End If If Command1.Caption = "X" And Command2.Caption = "X" And Command3.Caption = "X" Then If Text4.Text = "X" Then MsgBox "Has ganado el juego", vbOKOnly, "Juego del gato en red" Else MsgBox "Has perdido el juego", vbOKOnly, "Juego del gato en red" End If limpiar End If If Command1.Caption = "X" And Command4.Caption = "X" And Command7.Caption = "X" Then If Text4.Text = "X" Then MsgBox "Has ganado el juego", vbOKOnly, "Juego del gato en red" Else MsgBox "Has perdido el juego", vbOKOnly, "Juego del gato en red" End If limpiar End If

Page 65: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

If Command1.Caption = "X" And Command5.Caption = "X" And Command9.Caption = "X" Then If Text4.Text = "X" Then MsgBox "Has ganado el juego", vbOKOnly, "Juego del gato en red" Else MsgBox "Has perdido el juego", vbOKOnly, "Juego del gato en red" End If limpiar End If

If Command2.Caption = "X" And Command5.Caption = "X" And Command8.Caption = "X" Then If Text4.Text = "X" Then MsgBox "Has ganado el juego", vbOKOnly, "Juego del gato en red" Else MsgBox "Has perdido el juego", vbOKOnly, "Juego del gato en red" End If limpiar End If If Command3.Caption = "X" And Command5.Caption = "X" And Command7.Caption = "X" Then If Text4.Text = "X" Then MsgBox "Has ganado el juego", vbOKOnly, "Juego del gato en red" Else MsgBox "Has perdido el juego", vbOKOnly, "Juego del gato en red" End If limpiar End If If Command3.Caption = "X" And Command6.Caption = "X" And Command9.Caption = "X" Then If Text4.Text = "X" Then MsgBox "Has ganado el juego", vbOKOnly, "Juego del gato en red" Else MsgBox "Has perdido el juego", vbOKOnly, "Juego del gato en red" End If limpiar End If If Command4.Caption = "X" And Command5.Caption = "X" And Command6.Caption = "X" Then

Page 66: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

If Text4.Text = "X" Then MsgBox "Has ganado el juego", vbOKOnly, "Juego del gato en red" Else MsgBox "Has perdido el juego", vbOKOnly, "Juego del gato en red" End If limpiar End If If Command7.Caption = "X" And Command8.Caption = "X" And Command9.Caption = "X" Then If Text4.Text = "X" Then MsgBox "Has ganado el juego", vbOKOnly, "Juego del gato en red" Else MsgBox "Has perdido el juego", vbOKOnly, "Juego del gato en red" End If limpiar End If If Command1.Caption = "O" And Command2.Caption = "O" And Command3.Caption = "O" Then If Text4.Text = "O" Then MsgBox "Has ganado el juego", vbOKOnly, "Juego del gato en red" Else MsgBox "Has perdido el juego", vbOKOnly, "Juego del gato en red" End If limpiar End If If Command1.Caption = "O" And Command4.Caption = "O" And Command7.Caption = "O" Then If Text4.Text = "O" Then MsgBox "Has ganado el juego", vbOKOnly, "Juego del gato en red" Else MsgBox "Has perdido el juego", vbOKOnly, "Juego del gato en red" End If limpiar End If If Command1.Caption = "O" And Command5.Caption = "O" And Command9.Caption = "O" Then If Text4.Text = "O" Then MsgBox "Has ganado el juego", vbOKOnly, "Juego del gato en red" Else MsgBox "Has perdido el juego", vbOKOnly, "Juego del gato en red" End If

Page 67: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

limpiar End If

If Command2.Caption = "O" And Command5.Caption = "O" And Command8.Caption = "O" Then If Text4.Text = "O" Then MsgBox "Has ganado el juego", vbOKOnly, "Juego del gato en red" Else MsgBox "Has perdido el juego", vbOKOnly, "Juego del gato en red" End If limpiar End If If Command3.Caption = "O" And Command5.Caption = "O" And Command7.Caption = "O" Then If Text4.Text = "O" Then MsgBox "Has ganado el juego", vbOKOnly, "Juego del gato en red" Else MsgBox "Has perdido el juego", vbOKOnly, "Juego del gato en red" End If limpiar End If If Command3.Caption = "O" And Command6.Caption = "O" And Command9.Caption = "O" Then If Text4.Text = "O" Then MsgBox "Has ganado el juego", vbOKOnly, "Juego del gato en red" Else MsgBox "Has perdido el juego", vbOKOnly, "Juego del gato en red" End If limpiar End If If Command4.Caption = "O" And Command5.Caption = "O" And Command6.Caption = "O" Then If Text4.Text = "O" Then MsgBox "Has ganado el juego", vbOKOnly, "Juego del gato en red" Else MsgBox "Has perdido el juego", vbOKOnly, "Juego del gato en red" End If limpiar End If

Page 68: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

If Command7.Caption = "O" And Command8.Caption = "O" And Command9.Caption = "O" Then If Text4.Text = "O" Then MsgBox "Has ganado el juego", vbOKOnly, "Juego del gato en red" Else MsgBox "Has perdido el juego", vbOKOnly, "Juego del gato en red" End If limpiar End If

Explicación: El timer es el que se encarga de verificar a cada instante si ya hay un ganador o si el juego terminó sin ganador, y de acuerdo a esto manda un mensaje de información.

Page 69: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

Como puedo programar una aplicación que se conecte a la red del MSN Messenger?

Para conectarse a la red del MSN Messenger desde visual basic, primeramente debe colocar las siguientes referencias, desde el menú Proyecto -> Referencias

Y hecho esto podremos comenzar a programar nuestra aplicación

Page 70: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

Programando aplicación para conectarse a la red del MSN Messenger

Este código no lo incluí en esta parte ya que es más que entendible, puedes chocarlo en los códigos que te proporciono.

Page 71: 36177980 Curso Para Crear Aplicaciones en Red Con Visual Basic 6

Despedida

Gracias por adquirir este curso“CURSO PARA CREAR APLICACIONES EN RED CON VISUAL BASIC 6.0”

MARTÍN CAMPOS [email protected]

www.sisadmic.tk

POSIBLES ACTUALIZACIONES DEL CURSO:

- Aplicación para controlar remotamente una computadora- Aplicación para descargar archivos remotamente (FTP)

- Aplicación de control de acceso- Aplicación para controlar funciones de impresora

- Aplicación para conectar con Latinchat- Configurar opciones de la PC remota- Aplicación de renta de videos en red

- Programa cliente – servidor, que siga la IP aunque sea dinámica