Proceso cliente servido en qnx

Solo disponible en BuenasTareas
  • Páginas : 8 (1806 palabras )
  • Descarga(s) : 9
  • Publicado : 30 de julio de 2010
Leer documento completo
Vista previa del texto
PROCESO CLIENTE
Su función es leer los datos introducidos por el usuario mediante el teclado, para después enviarlos al proceso “SERVER” mediante la función MsgSend(). Para poder establecer la comunicación con aquel proceso primero se deberá abrir un canal de comunicación utilizando la función open(), los parámetros de dicha función son el nombre de nuestro path de canal de conexión “server” ylos permisos que le otorgamos en este caso son solamente de escritura y lectura “RD”,”WR”.

chanelID = open( "serv", O_RDWR );

En dado caso que nuestro cliente no genere el canal se imprimirá un mensaje de error. Cuando capturemos el mensaje en consola y después lo enviamos al proceso “SERVER”, enviamos solamente 128 caracteres (ver la siguiente estructura en la cual indicamos el tamañodel mensaje).

# define SIZEMAX_MSG 128
typedef struct
{
uint16_t msg_no;
char msg_data[SIZEMAX_MSG];
} client_msg_t;

Enviamos el mensaje capturado mediante la función MsgSend(), si en caso de que el mensaje no pueda ser enviado se imprimirá un mensaje de error.

statusMsgReply = MsgSend( chanelID, &strMessage, sizeof( strMessage ), msgReply,SIZEMAX_MSG );

Como datoadicional y siendo esto parte del mensaje que se envia al “SERVER” especificamos en la estructura de la mensaje un numero o tipo, que representara un rango de mensaje que el servidor está dispuesto a escuchar, si este valor fuera diferente de _IO_MAX + 1 o _IO_MAX + 2 el servidor jamás podría manejar esos mensajes.

strMessage.msg_no = _IO_MAX + num;

PROCESO SERVIDOR

La funcionalidad deeste proceso será el estar esperando recibir un mensaje de otro proceso llamado “CLIENT”, cuando un mensaje llegue al servidor este lo introducirá en una cola, “MyQueue”.

Para establecer una comunicación entre el cliente y el servidor utilizamos la lógica del Resource Manager de QNX, brevemente el Resource Manager se compone de varias capas.

• IOFUNC- Consiste en un grupo de funciones queson manejadores de funciones de entrada y salida al Resource Manager, para utilizar estas funciones usamos la libreria

• RESMGR- examina los mensajes entrantes y al manejador del proceso para un mensaje

• DISPATCH - actúa como un punto de bloqueo para poder manejar mensajes _IO_, pulsos, otros mensajes.

La siguiente imagen es un ejemplo de cómo interactúan las capas delResource Manager

[pic]
Para continuar con la idea de comunicar el servidor y el cliente el Resource Manager comenzamos definiendo las siguientes estructuras globales:

resmgr_connect_funcs_t ConnectFuncs;
resmgr_io_funcs_t IoFuncs;
iofunc_attr_t IoFuncAttr;

En breve, ConnectFuncs representara las funciones de conexión, IoFuncs funciones de entrada y salida,IoFuncAttr describe atributos de un dispositivo asociado con el Resource Manager, como dato adicional para asegurar que el mensaje entre servidor y el cliente sea después correctamente interpretado se define una estructura idéntica a la que envía el llamada “server_msg_t”. Como parte del trabajo del servidor también tendrá que crear una cola de mensajes usando la función mq_open(), tiene comoargumentos la localización de la cola, permisos de entrada y atributos propios.

Para tener un dispatch handler que será el mecanismo para que el cliente puede enviar mensajes al Resource Manager, usamos la función dispatch_create() que regresa un puntero de tipo dispatch_t *dpp, también se deben de inicializar los recursos del Resource Manager con la estructura resmgr_attr_t, para ser másadelante usada por la función resmgr_attach().

Dentro del proceso server tenemos las siguientes llamadas importantes, en la siguiente especificamos cual función llamar con que mensaje en particular:

iofunc_func_init( _RESMGR_CONNECT_NFUNCS, &ConnectFuncs,
_RESMGR_IO_NFUNCS, &IoFuncs );

Inicializamos la estructura definida por default, permisos, etc:...
tracking img