Documentos de Académico
Documentos de Profesional
Documentos de Cultura
VBGECap 20
VBGECap 20
20
APLICACIONES CLIENTE SERVIDOR
COMUNICACIN PUERTO SERIE: EL CONTROL MSCOMM
(Captulo inacabado. Algn estudiante quiere colaborar a su terminacin?)
Hasta ahora hemos visto aplicaciones que pueden utilizarse por s solas. Pueden acceder a
bases de datos que estn en el mismo ordenador que la aplicacin o en otro, unido mediante
una red de rea local. La conexin a las bases de datos a las que accede se realiza, bien
indicndole la direccin y carpeta (\\MiServidor\BasesdeDatos\MiBase.Mdb) o bien mapeando
esa direccin (crear una unidad de disco que contienen esa direccin). De esta forma
podemos acceder a una base de datos instalada en un equipo remoto y la aplicacin debe
funcionar perfectamente, aunque al abrir o leer la base de datos origine un trfico elevado por
la red de rea local.
Con esta configuracin podemos tener problemas de lentitud, sobre todo si la red es lenta y si
hay muchos usuarios trabajando con esa aplicacin en distintos ordenadores, accediendo
todos ellos a travs de la red a un servidor que contienen la base de datos. Esta lentitud se
incrementara en una gran escala si la red a utilizar fuese Internet mediante una conexin lenta.
Pero lo que ms se notara sera la ocupacin de los recursos de la red durante las consultas a
esa base de datos. Dependiendo de cmo se crease el recordset, podra darse el caso de
transmitir por la red todos los datos de la base de datos para que nuestra aplicacin utilice
nicamente los datos correspondientes a un registro. Pensando en una aplicacin bancaria,
por ejemplo la peticin de saldo de una cuenta desde un cajero automtico, los nicos datos
relevantes de esa operacin sern el nmero de cuenta corriente, un cdigo para indicar que lo
que se desea es el saldo, y como datos de retorno, el nmero de esa cuenta, el saldo actual
disponible y quizs un nmero de comprobacin (Checksum) para comprobar que no ha
existido error en la comunicacin. De nada nos servira en el cajero conocer el estado de
cantidades retenidas, operaciones pendientes, etc.
Si en ese ejemplo del cajero cresemos un objeto Database, un recordset, leysemos todos los
datos del recordset y luego disemos la orden de cerrarlo, estaramos enviando informacin
innecesaria a travs de la red, con el coste de tiempo y ocupacin que ello representa.
Casi llegamos a demostrar con esta introduccin que sera ms conveniente hacer una
aplicacin que tuviese dos partes: una, residente en el puesto de operacin, (que llamaremos
aplicacin cliente) que fuese capaz de enviar datos solicitando informacin a otra aplicacin,
instalada en el servidor donde est la base de datos. Esta segunda aplicacin, que llamaremos
aplicacin servidor, abrir la base, crear los recordsets necesarios, filtrar la informacin,
realizar con ella operaciones matemticas, y una vez concluido todo el proceso, enviar a la
aplicacin cliente los datos estrictamente necesarios. Obviamente se necesita que ambas
aplicaciones sean capaces de entenderse entre s, es decir, que tengan un protocolo de
comunicacin entre ellas previamente definido. Esto es lo que se denomina una aplicacin
cliente servidor.
La aplicacin cliente servidor ms popular es el navegador de Internet. Esta aplicacin est
formada por una aplicacin cliente (Navegador IEXplore, NetScape, etc) y una aplicacin
servidor (Internet Information Server IIS, Apache, etc). El protocolo para que se comuniquen
entre ellas es el protocolo Http o el Ftp. Estos protocolos al ser pblicos, permiten a cualquier
empresa hacer su propia aplicacin cliente o servidor.
No es nuestro deseo llegar a tanto. El navegador de Internet es una aplicacin clienteservidor
que sobrepasa cualquier proyecto que podamos imaginar para realizarlo por medio de
programacin en VB. Cualquier navegador de Internet comercial lleva asociadas una serie de
funciones, muchas de ellas transparentes para el usuario, que sera imposible crear una
aplicacin de este calibre, sobre todo como ejemplo de un curso de VB. Pensemos en una
LSB
Cap. 20
Pg. 1
aplicacin ms sencilla, que nos permita conocer como funcionan las aplicaciones cliente
servidor, y sirva adems para algo til.
Esa aplicacin no puede ser otra que una gua telefnica, (versin novsima del Listatel) cuya
base de datos est en un servidor conectado a Internet, al que se podr acceder desde un
nmero ilimitado de puestos cliente. En la base de datos del servidor, en un conjunto de tablas,
figurarn los nombres, nmeros de telfono, despacho, etc. de una serie de personas, y el
organigrama de esas personas dentro de la organizacin. Estas tablas sern estticas, es
decir, tendrn datos que solamente se actualizarn cuando exista un cambio en esas personas,
pero no variarn durante la ejecucin del programa. En otra tabla, esta dinmica, tendremos el
registro de los usuarios que estn conectados en ese momento al servicio. As podremos saber
si un usuario est presente y de esta forma conocer un dato importante para otro servicio que
va a tener este programa: su direccin IP actual. Sabiendo que est conectado y con su
direccin IP podremos enviarle mensajes directamente. Creo que ya vemos que se trata de una
agenda telefnica que lleva incorporado un servicio de mensajera. El servicio de mensajera
enviar mensajes con texto plano o RTF y puede llevar ficheros anexados. A esta agenda, y a
su protocolo de comunicacin le vamos a denominar SML. No se preocupe de no conocer las
siglas. Al protocolo SMTP tampoco lo conocan en el momento de su creacin.
Una aplicacin cliente puede comportarse como aplicacin servidor de otra aplicacin, incluso
de s misma. Este es el caso de la aplicacin cliente del SML. Cuando vamos a pedir la
informacin de un abonado telefnico al servidor, el cliente se comporta como tal. Sin embargo
cuando otro usuario de SML nos enva un mensaje, es nuestra aplicacin la que realiza las
funciones de servidor. Ver esto con mucha ms claridad cuando comencemos el ejemplo.
Toda aplicacin cliente - servidor debe tener un sistema de comunicacin entre la aplicacin
cliente y la aplicacin servidor. Parece que la comunicacin que ha de tener es a travs de una
red IP (Red de Area Local, Red Privada Virtual, Internet) pero puede ser cualquier otro sistema
de comunicacin entre ordenadores. Sin ir ms lejos, a travs del puerto de comunicacin serie
COM-1 COM-2. A efectos de los programas de la aplicacin cliente o servidor solamente
variar en la forma en la que reciban y transmitan los datos. En nuestro ejemplo vamos a
utilizar la comunicacin a travs de una red IP, usando el control Winsock ya estudiado. Tanto
la aplicacin cliente como la aplicacin servidor debern tener un Winsock. Como en nuestro
caso, segn explicamos ms atrs, la aplicacin cliente se convierte en aplicacin servidor para
recibir mensajes, sta deber tener dos Winsocks, uno para la funcin cliente, y otro para la
funcin servidor.
Cuando se disea una aplicacin cliente servidor hay que comenzar pensando en las
funciones que va a realizar y sobre esas funciones comenzar a escribir el protocolo de
comunicacin. No es fcil tener terminado el protocolo de comunicacin antes de escribir la
primera lnea de cdigo del programa. Segn se van concretando cada una de las acciones
que debe realizar vemos que es necesario introducir nuevos cdigos de operacin en nuestro
protocolo. No se preocupe que eso no es improvisar. Pero s es muy importante tener las
cosas claras desde el principio y saber que es lo que va a hacer nuestra aplicacin para de
esta forma poder saber dar respuesta correcta a cada uno de los dos programas. Y para tener
las cosas claras, el autor recomienda que el protocolo de comunicacin se establezca antes de
comenzar a escribir el cdigo en tanto se pueda. Y que se escriba en un documento en el
propio ordenador o mejor an, en una base de datos u hoja de clculo, que nos permita
ordenar las rdenes y avisos de nuestra aplicacin para evitar de esta forma cualquier
repeticin involuntaria.
Es muy importante a la hora de pensar el protocolo de comunicacin que este no pueda inducir
a error al programa. Si el programa tiene como funcin la transmisin de mensajes (Tal como
es nuestro caso) los mensajes no pueden estar limitados ni en su longitud ni en su contenido
por el formato del protocolo de comunicaciones. Se entiende mejor esto analizando el protocolo
del SML (fruto nicamente de la imaginacin del autor y no sujeto a normas ni
recomendaciones internacionales de ningn tipo)
LSB
Cap. 20
Pg. 2
LSB
Cap. 20
Pg. 3
LSB
Cap. 20
Pg. 4
Esto nos lleva a que el cliente siempre debe indicar al servidor su versin. Esto no ocupa unos
recursos excesivos y puede ser muy til cuando prevemos introducir una modificacin. Esta
prctica puede incluso servir para conocer aquellos clientes a los que hay que realizar el
cambio de versin y enviarles una nueva. En el ejemplo de este curso, el cliente comunica al
servidor su versin en el acto de conectarse mediante el acrnimo <VER>.
El servidor tambin debera enviar su versin al cliente. No est previsto en la aplicacin SML
pero confieso que no sobrara que al identificarse el cliente y devolverle el servidor la
conformidad del registro, le devolviese tambin la versin del servidor. Se da cuenta que
segn se avanza en la definicin del protocolo aparecen nuevas necesidades?
La aplicacin cliente debe mostrar de forma clara al usuario el estado de conexin o
desconexin con el servidor. Y a ser posible, que indique la causa de la no conexin (Fallo en
la RAL, fallo en el servidor) Esta informacin se obtienen de forma muy sencilla analizando los
errores generados en el Winsock a la hora de realizar la conexin.
Cuando utilice el puerto COM para la comunicacin, bien sea directamente o a travs de
mdem, debe indicar claramente al usuario el estado de esa conexin, analizando la seal
DSR (esta seal est activa cuando el mdem est conectado, y en caso de comunicacin
directa, cuando se use, el Host debe poner a 1 esta seal para poder trabajar). Recuerde que
la comunicacin por el puerto COM es asncrona respecto a la ejecucin del programa.
En el ejemplo de aplicacin cliente servidor se han ensayado tambin los controles
avanzados de Visual Basic (Capitulo 16). La aplicacin tal como se dijo es una gua telefnica,
que presenta en un TreeView el organigrama del Organismo o empresa a la que pertenece la
gua. Esto facilita la bsqueda de una persona, hacindolo por departamento. La gua permite
tambin buscar por nombre, primer apellido, segundo apellido o combinacin de ambos. Una
vez encontrada la persona, se cubren todos los datos de la misma, para presentarlos en la
solapa de la gua propiamente dicha, y el dato de su alias (dato que define de forma nica a
cada usuario) aparece en la direccin de correo para poder enviarle un mensaje. Para hacer
una prctica con el puerto de comunicaciones COM-1 COM-2 utilizaremos un mdem,
conectado al PC a travs de uno de estos puertos, para marcar el nmero telefnico.
Todas las operaciones de bsqueda de datos las haremos mediante consultas a la base de
datos que est en el servidor. Las consultas se realizarn siguiendo el protocolo de
comunicaciones. El organigrama se guardar en el cliente, en una base de datos, para evitar
en lo posible el envo desde el servidor. La razn para esto es que el organigrama puede ser
muy extenso, y no va a variar muy a menudo. Como esta informacin habra que enviarla nada
ms conectarse el cliente, y como puede ser bastante amplia, esto podra originar un trfico
intenso por la red, que es justamente lo que queramos evitar. Solamente se va a enviar cuando
haya cambiado. Cmo sabe el cliente que ha cambiado?. Cmo sabe el servidor que el
cliente tiene ya la informacin actualizada? La idea ms sencilla para conocerlo es que el
cliente enve cada vez que se registra (al comienzo de la conexin) el nombre de la revisin del
organigrama que tienen. El nombre puede ser cualquiera. Lo que hace el servidor por defecto
para poner el nombre a la revisin es combinar una cadena de texto con el nombre de la
organizacin seguido de la fecha (da/mes/ao) en la que se realiza la revisin. De esta forma
es imposible que haya dos fichero con el mismo nombre. Al recibir ese nombre el servidor, si
es igual al de la ltima revisin, le devuelve un OK. Si no es igual, le devuelve una instruccin
para que el cliente solicite al servidor que le enve la nueva revisin. El cliente la solicita y el
servidor se la enva. Y al recibirla, el cliente reemplaza el contenido de la base de datos por los
nuevos valores recibidos.
Y razonando los procedimientos de esta misma forma, vamos completando el mecanismo de
comunicacin entre cliente y servidor, y paralelamente creando el protocolo de comunicacin.
Por eso es muy probable que el protocolo de comunicacin no est acabado hasta que est
acabada la aplicacin.
Al da de hoy (30 de Octubre de 2002) no est terminada la aplicacin. Posiblemente no lo est
nunca porque sea una aplicacin en continua ampliacin. Esto es lo bonito de los programas
ejemplo de los cursos de visual basic.
LSB
Cap. 20
Pg. 5
LSB
Cap. 20
Pg. 6
ANEXO 1
SERVIDOR DE BASES DE DATOS Y MENSAJERIA LISTATEL (SML)
PROTOCOLO DE COMUNICACIN CLIENTE SERVIDOR
La comunicacin entre cliente y servidor se realizar mediante el protocolo descrito ms
adelante, a travs de cualquier medio de comunicacin. Generalmente ser comunicacin a
travs de red IP, pero esto no debe impedir que los clientes se puedan conectar al servidor a
travs de otros medios de comunicacin, como puede ser un mdem telefnico o un enlace va
satlite.
En cualquier caso, el contenido de las rdenes y comandos de este protocolo ser siempre en
ASCII, con caracteres alfanumricos que permitan ver perfectamente el trfico entre ambos
interlocutores. El hecho de utilizar solamente caracteres legibles asegura igualmente la
comunicacin a travs de cualquier medio de telecomunicacin, incluyendo dispositivos de
cifrado on-line colocados entre cliente y servidor.
La comunicacin puede iniciarse tanto en el servidor como en cualquiera de los clientes. Una
comunicacin puede estar compuesta de:
Ordenes
Respuestas
Confirmaciones
Avisos
Ordenes: Son aquellas partes de la comunicacin que inician una operacin en el equipo
colateral.
Respuestas. Son siempre respuesta a una orden, y contendrn el resultado de la operacin
generada por la orden, o en su defecto, la notificacin de que esa orden no ha sido ejecutada o
que dio resultado nulo.
Confirmaciones: Son el reconocimiento de recepcin de una comunicacin. Pueden
emplearse tanto para responder a un aviso como para confirmar que una orden se ha recibido,
y que est siendo tratada. Tambin pueden existir confirmaciones para avisar que una orden o
una respuesta no ha llegado en un tiempo determinado.
Avisos: Son aquellas comunicaciones que no ejecutan ninguna accin en el colateral, pero
informan de algo. Por ejemplo, servidor fuera de servicio temporalmente, servidor restablecido.
Pueden ser individuales, en cuyo caso generarn normalmente una confirmacin, o broadcast,
en cuyo caso no generarn confirmacin.
Formato de las tramas de comunicaciones.
La trama de una comunicacin estar compuesta de unos acrnimos que indicarn la orden,
respuesta, confirmacin o aviso que envan, direccin IP, nombre de la mquina o nombre del
servidor que enva, direccin IP, nombre de la mquina o nombre del servidor destino, datos,
cheksum de la trama y acrnimo de fin de trama. Cada uno de estos componentes ir metido
entra los smbolos < > y su longitud puede ser variable. Cuando se enve informacin, esta se
colocar detrs del acrnimo que la define, separada por la barra /.
Ejemplos:
<SAT> Servidor Atencin. Inicia una sesin de un cliente con el servidor.
<IPO/10.3.22.119>
Direccin IP del equipo origen
<IPD/217.126.179.96> Direccin IP del equipo destino
<QRY/Select * From Agenda_Personal Where Apellido1 Like FERN%>
LSB
Cap. 20
Pg. 7
Si hubiese que emplear los smbolos /, &, < o > como smbolos de la informacin, deber
anteponerse a cada uno de ellos el smbolo &.
Por ejemplo:
<QRY/Select * From Agenda_Personal Where Edad &> 25>
El cheksum ser el resultado de realizar la funcin XOR sobre todos los caracteres de los
componentes de la trama, exceptuando los correspondientes precisamente a este cheksum y al
fin de trama. El cheksum se indicar en decimal, con el acrnimo CHK. Por ejemplo,
<CHK/235>
El acrnimo de fin de trama ser <EOT>
El orden de los componentes de una trama no debe ser estricto, si bien debe ir en primer lugar
el acrnimo que inicie la sesin de comunicaciones, en penltimo lugar el cheksum, y en ltimo
lugar el <EOT>
Una trama puede contener varias ordenes siempre y cuando estas sean congruentes.
LSB
Cap. 20
Pg. 8
<QIR>
<QIS>
<ECO>
<OCE>
<CRY>
Consulta los datos del correo de un usuario pasndole en este caso como
parmetro la direccin de correo SML. Devuelve los datos con el acrnimo
<QIP>
Consulta los datos del correo de un usuario pasndole la direccin de correo
SMTP. Devuelve los datos con el acrnimo <QIP>
Orden de envo del mismo dato en la respuesta a esa orden. Se enva, por
ejemplo, en una consulta a la base de datos, para que el cliente ubique la
respuesta a esa consulta en un sitio determinado.
Se emplea para devolver el mismo dato recibido con <ECO>
Inicia o finaliza una operacin de cifrado de datos. Lleva como parmetro INI
para iniciar y FIN para terminar. En el caso de iniciar, lleva uno o dos
parmetros ms, el nmero de clave o el nombre de un usuario con clave
asociada. Puede llevar dos nombres de usuario en caso que se cifre
doblemente con la clave privada del remitente y la clave publica del destino, en
cuyo caso se envan como dos parmetros
<CRY/INI/PUB_LUIS.RODRIGUEZ/PRI_JOSE.LOPEZ>
Si el inicio no llevase parmetros de clave, el servidor entender que se cifra
con la clave asignada en el servidor al usuario que enva
<CRY/FIN>
<DI0>
<DI1>
...
<DI9>
<BRC>
<BRS>
<BRA>
<VER>
<VES>
<BIP>
<DIP>
<UCC>
<MN_>
<FR_>
<IP_>
<TO_>
<SJ_>
<NX_>
<CX_>
<BX_>
LSB
Cap. 20
Pg. 9
<EX_>
<MSG>
<CHM>
<RTF>
<SAR>
<SAL>
<FM_>
Una mquina puede identificarse bien por su direccin IP o por su nombre dentro de una red.
Puede tambin identificarse por ambos, en aquellas situaciones en las que la mquina
receptora del mensaje deba retransmitirlo a otra mquina. Este es el caso, por ejemplo, de una
red conectada a travs de una conexin ADSL. El mdem ADSL tiene asignado un nmero IP
verdadero, y en esa red existen varias mquinas que cada una de ellas tendr un nombre
distinto, y un nmero IP distinto, (nmero IP que para estas mquinas ser ya de la numeracin
interna) Al poder identificar una mquina por su IP y nombre, basta con poner como IP de
destino el numero IP real del mdem ADSL, y como nombre, el nombre de la mquina dentro
de la red privada.
Por ejemplo:
<CAT> <IPO/100.100.100.100><IPD/217.126.179.96><NMD/Administracion_1>
<OCE/123>
<RQY/[Antonio Fernandez_91 1234567][Antonio Fernangomez_91 7654321]>
Este mensaje devuelve el resultado de una consulta a la mquina Administracion_1 que est en
la red de rea local cuyo acceso desde Internet se realiza por un mdem ADSL cuyo nmero IP
es el 217.126.179.96. Lgicamente, la mquina real que recibe esta comunicacin no es la
mquina Administracion_1, sino otra mquina colocada en la misma red de rea local, sobre la
cual se ha hecho NAT desde Internet para el puerto que use este sistema, y esta mquina, una
vez recibido el mensaje, lo reenva a la mquina Administracion_1 que ser quien lo trate. Si la
comunicacin no llevase ms que el nmero IP, se entiende que el destino es la mquina que
tiene ese nmero IP.
ORDENES PREPROGRAMADAS
Las rdenes preprogramadas son aquellas que el servidor ya tienen programadas en su
cdigo. Deben ir necesariamente tras el acrnimo <QPR> ya que en caso contrario no sern
tratadas.
LSB
Cap. 20
Pg. 10
<ORG>
<ABN>
<ABD>
<ABL>
<ABC>
<ABB>
<ABA>
<ABE>
<ABF>
<ABG>
<ABH>
LSB
Cap. 20
Pg. 11
LSB
Cap. 20
Pg. 12
PRPIEDADES
Existen propiedades que pueden establecerse en tiempo de diseo o en tiempo de ejecucin, y
otras que solamente se pueden ejecutar o consultar en solamente en tiempo de ejecucin. Se
detallan a continuacin las primeras. Las segundas se enumerarn tras estas, aunque se
nombran algunas de estas ltimas al explicar cada una de las propiedades del primer tipo.
CommPort
Indica el nmero del puerto serie usado. Admite los valores de 1 a 255. Cambiando esa
propiedad podemos cambiar el puerto de comunicacin que vamos a usar (Un PC tiene
normalmente 2 puertos serie : El Com1 y el Com2. Puede tener sin grandes problemas
Hardware hasta 4 (Com3 y Com4) Si le damos a ese valor un nmero de puerto inexistente,
dar error.
Settings
Sintaxis
Indica la velocidad, paridad, nmero de bits y bits de stop (parada) que se van a usar en la
comunicacin.
Los valores posibles para velocidad son : Indica la velocidad en baudios.
50
100
110
300 600
1200
2400
4800
9600
14400
19200 y
28800
LSB
Cap. 20
Pg. 13
programan
Handshaking
Especifica el mtodo de control sobre el flujo de informacin. En una comunicacin serie se
necesita conocer si el puerto puede enviar informacin (necesita saber si el mdem est
preparado para recibirla) y necesita indicarle al mdem que l est preparado para recibir
informacin. A este proceso se le denomina Handshaking. (Handshaking = Control de Flujo)
(Como sabr por sus conocimientos de ingls, Handshaking significa apretn de manos,
ponerse de acuerdo. Y ponerse de acuerdo entre dos terminales que van a comunicarse es
establecer las condiciones de control que uno va a tener sobre otro.)
El Control de Flujo puede hacerse de dos formas : Una mediante las seales auxiliares del
puerto (RTS, CTS, DSR, DTR), que son cables adicionales que tendrn una tensin positiva
respecto a los 0V del equipo si esa seal est activada, o una tensin negativa si no lo est.
Este tipo de control del flujo de informacin es el tpico para comunicarse el ordenador con un
mdem.
Existe otra forma de controlar el flujo de informacin : mediante seales especiales que se
envan por los dos cables que transportan la informacin. Mediante estas dos seales podemos
controlar que el ordenador enve informacin o deje de enviarla. De igual forma, podemos
indicarle al mdem que enve o no enve. Estas seales especiales se denominan X-ON y XOFF.
La propiedad Handshaking controla la forma de realizar este proceso. Puede tomar los
siguientes valores :
0 - No existe Control de Flujo
1 - Control de Flujo mediante XON - XOFF
2 - Control de Flujo mediante Request To Send (RTS) y Clear To Send (CTS)
3 - Control de Flujo mediante XON - XOFF y RTS - CTS
Los tres tipos de Control de Flujo tiene cada uno su aplicacin.
InBufferSize
Mediante esta propiedad establecemos el tamao del Buffer (almacn de datos) de entrada.
Este Buffer sirve para poder recibir datos sin que tenga que intervenir la aplicacin
continuamente para controlar el puerto de entrada.
LSB
Cap. 20
Pg. 14
LSB
Cap. 20
Pg. 15
NullDiscard
Cuando se recibe el carcter nulo (00000000) puede ser que no sirva para nada a efectos de
nuestra aplicacin, o que este carcter sea un dato mas. Esta propiedad acepta los valores
True / False. Si es True se desprecia el carcter Nulo. Si es False, se toma como un carcter
mas.
CTSTimeout
Es el tiempo (en milisegundos) que permanece esperando la seal CTS (Seal CTS Dispuesto para enviar), seal de entrada al ordenador que debe estar presente antes de que el
puerto comience a enviar informacin. El tiempo se mide desde que se pone activa la seal de
salida RTS (Peticin de envo). Si se supera este tiempo entre el instante de activacin de la
seal RTS y la recepcin de la seal CTS, se produce el evento CTSTO. Poniendo 0 en esta
propiedad, se deshabilita, y en estas condiciones no se producir nunca el evento CTSTO.
CDTimeout
Es el tiempo mximo de espera (en milisegundos) desde que se activa la seal DTR hasta que
se recibe la seal CD (Carrier Detect - Deteccin de portadora). Este tiempo solamente tendr
importancia en ciertas aplicaciones donde se espere recibir CD continuamente. No tendr
sentido cuando la aplicacin se queda en espera a recibir una comunicacin, pero sin saber
cuando la tiene que recibir. Si transcurre el tiempo programado en esta propiedad, ocurrir el
evento CDTO. Poniendo el valor 0 se deshabilita esta propiedad y no se producir nunca el
evento CDTO.
DSRTimeout
Similar a la anterior, pero en vez de esperar la seal CD se espera la seal DSR. Esta
propiedad s tiene sentido, ya que si, por ejemplo, estamos conectados con un mdem, y
nuestra aplicacin se pone a la espera de recibir alguna llamada, activa la salida DTR, y espera
recibir inmediatamente la respuesta de que el mdem est dispuesto, mediante la lnea DSR.
Si transcurre el tiempo programado sin recibir la seal DSR se producir el evento DSRTO .
Ponindola a 0, se deshabilita esta propiedad y nunca ocurrir el evento DSRTO.
RTSEnable
Activa (Pone a 1) la seal RTS (Request To Send - Peticin de envo) Esta seal debe ponerse
a 1 para indicar al mdem (o al equipo que va a recibir nuestra comunicacin) que deseamos
enviar datos. Debe estar activada durante toda la transmisin de datos.
Cuando se pone la propiedad Handshaking a 2 (control con RTS / CTS) 3 (Control con RTS /
CTS y con X-ON / X-OFF) no debemos preocuparnos de poner a 1 la seal RTS, pues lo hace
automticamente el puerto de comunicaciones. Esta propiedad est ah para aplicaciones
donde no se emplee ese tipo de Handshaking y necesitemos activar algo antes de transmitir.
(Caso por ejemplo de transmisin de datos por radio, donde podemos usar esta seal de salida
para activar el PTT (Push To Talk - Pulse para hablar) y poner el transmisor en marcha)
DTREnable
Activa (Pone a 1) la salida DTR (Data Terminal Ready - Terminal de Datos Listo). Esta seal
se emplea para decirle al mdem que el terminal (Ordenador) est preparado para recibir
datos.
Se hace la misma observacin que para la propiedad anterior respecto a los valores de la
propiedad Handshaking
LSB
Cap. 20
Pg. 16
Interval
Indica el tiempo (en milisegundos) del intervalo entre una y otra comprobacin del estado de
recepcin del puerto. El valor mnimo es de 55 ms.
El anlisis del puerto de comunicacin no tiene nada que ver con la generacin del evento
OnComm. Este evento se producir cuando se cumplan las condiciones para ello,
independientemente del tiempo programado en esta propiedad. La comprobacin del puerto
cada intervalo de tiempo marcado por esta propiedad solamente afecta a averiguar el estado
de las lneas auxiliares CD, DSR y CTS, y para saber el nmero de caracteres existentes en los
Buffers de transmisin y recepcin.
Las siguientes propiedades no difieren en nada respecto a otros controles :
Left, Name, Index, Top, Tag
Propiedades propias del tiempo de ejecucin
PortOpen
Abre el puerto de comunicacin. Puede tener los valores True (Para abrirlo) y False (Para
cerrarlo) Si tenemos un MSComm con Nombre (Name) MSComm1, para abrirlo ejecutaremos
la siguiente sentencia :
MSComm1.PortOpen = True
Para cerrarlo, ejecutaremos :
MSComm1.PortOpen = False
InBufferCount.
Nos permite averiguar cuantos caracteres tenemos en el Buffer de entrada. Con el mismo
MSComm anterior, comprobaremos el nmero de caracteres sin leer con la sentencia :
caracteressinleer = MSComm1.InBufferCount
OutBufferCount
Nos permite conocer cuantos caracteres quedan por transmitir en el Buffer de salida.
Emplearemos la sentencia :
caracteressinenviar = MSComm1.OutBufferCount
Output
Enva caracteres al Buffer de salida. Debe existir un signo igual ( = ) entre Output y lo que se
enva al Buffer. Para enviar la frase Curso de Visual Basic ejecutaremos la sentencia :
MSComm1.Output = Curso de Visual Basic
Si deseamos enviar el contenido de una variable
MSComm1.Output = variable
LSB
Cap. 20
Pg. 17
Input
Lee el Buffer de recepcin. El nmero de caracteres ledos depender del valor de la propiedad
InputLen. Cuando la propiedad InputLen tiene el valor 0, el Buffer se lee completo. Si
InputLen tiene un valor distinto de 0, se leer un nmero de caracteres igual al valor de esta
propiedad.
CommEvent
Devuelve el evento mas reciente que ha ocurrido para generar el evento general OnComm
(Vea mas adelante). Esta propiedad no est disponible en tiempo de diseo y es de slo
lectura en tiempo de ejecucin.
Sintaxis
NombredelMSComm.CommEvent
Break
Devuelve un valor (True / False) que indica que se ha recibido la seal Break.
variable = MSComm1.Break
CDHolding
Devuelve el estado de la lnea de control CD (Deteccin de Portadora) Si es True, esa entrada
est activada, si es False, la entrada est desactivada.
variable = MSComm1.CDHolding
CTSHolding
Devuelve el estado de la lnea de control CTS (Dispuesto para enviar) Si es True, esa entrada
est activada, si es False, la entrada est desactivada.
variable = MSComm1.CTSHolding
DSRHolding
Devuelve el estado de la lnea de control DSR (Data Set Ready ) Si es True, esa entrada est
activada, si es False, la entrada est desactivada.
variable = MSComm1.DSRHolding
LSB
Cap. 20
Pg. 18
If Then deberemos colocar el cdigo necesario para que la aplicacin se prepare para
recibir una comunicacin a travs del mdem.
End If
Los eventos del Comm pueden identificarse por una constante o un nmero. La constante,
como todas las de Visual Basic, tiene una expresin bastante difcil. Se pone entre parntesis
el nmero que identifica a ese evento. Este nmero debe declararse como Integer.
Se ejecutar el Procedimiento OnComm cuando ocurra alguno de los siguientes eventos :
ComEvCD
(5)
ComEvCTS
(3)
ComEvDSR
(4)
ComEvRing
(6)
ComEvReceive( 2 )
ComEvSend
(1)
ComEvEOF
(7)
comEventBreak (1001)
ComEventCDTO (1007)
Tiempo de espera de Deteccin de portadora. La lnea
Deteccin de portadora (CD) estuvo baja durante el periodo de tiempo
especificado en la Propiedad CDTimeout, mientras se intentaba
transmitir un carcter.
ComEventCTSTO
ComEventDSRTO
LSB
Cap. 20
Pg. 19
ComEventOverrun
ComEventRxOver
ComEventRxParity
ComEventTxFull
ComEventDCB
ComEventFrame
1004
LSB
Cap. 20
Pg. 20
NOTA ADICIONAL
El puerto de comunicaciones.
(Potencial de 0 V.).
TxD
Transmisin de datos. Es una salida del ordenador. Por ella salen los datos en serie.
RxD
Recepcin de datos. Es una entrada del ordenador. Por ella entran los datos en serie.
RTS
Request To Send. Peticin de envo. Es una salida del ordenador. El ordenador pone a
1 esta seal cuando quiere enviar datos.
CTS
Clear To Send. Dispuesto para enviar. Es una entrada del ordenador. Si est a 1
significa que el ordenador puede enviar datos pues el mdem (o el dispositivo que
vaya a recibirlos) est preparado para hacerlo.
DSR
Data Set Ready. Dispositivo de datos preparado. Es una entrada del ordenador. Le
indica que el mdem est encendido y listo para funcionar.
DCD o CD
Carrier Detect. Deteccin de portadora. Es una entrada del ordenador. Le
indica al ordenador que el mdem est detectado seal de audio (tonos) vlida.
DTR
Data Terminal Ready. Terminal de datos listo. Es una salida del ordenador. Indica que
est listo para trabajar. Suele emplearse para indicar al mdem que el ordenador est
dispuesto para recibir informacin.
Otra seal (disponible slo en los ordenadores que tengan conector de 25 pines, y no en todos)
es la seal RING (timbre del telfono) Es una entrada del ordenador. Le indica que est
sonando el timbre de la lnea telefnica del mdem.
Disposicin de los pines en el ordenador
Dependiendo de si tiene conector de 9 pines o de 25, la distribucin de estas seales
fsicamente en el conector es :
Conector de 9 pines
Pin
3
2
7
8
6
5
1
4
Conector de 25 pines
Seal
TxD
RxD
RTS
CTS
DSR
GND
CD
DTR
RING
Tierra de proteccin
Pin
2
3
4
5
6
7
8
20
22
1
(La seal RING no est disponible en el conector de 9 pines. La deteccin del Ring del
telfono se realiza directamente por la lnea RxD. El mdem enva la palabra RING cuando
suena el timbre del telfono. La tierra de proteccin tampoco se usa en este conector.
LSB
Cap. 20
Pg. 21