Escuchar a la vez por un socket y el teclado

08/08/2004 - 12:00 por hartman | Informe spam
Hola,

soy nuevo en esto de la programación en Windows (y también en estos
grupos, así que si la pregunta no iba aquí pido mis disculpas) y me ha
surgido en la duda respecto a una aplicacion cliente-servidor que estoy
desarrollando con la libreria winsock.

Resulta que tengo que escuchar (en el servidor) por los datos que llegan
a traves de un socket del cliente y ademas por las ordenes de un usuario
que las introduce a traves del teclado. Me gustaria saber que opcion
podria usar para que el sistema se bloquee a la espera de informacion
por el socket o pulsacion de teclado. Algo similar al select de unix (en
winsock tb existe pero no escucha por el teclado)

Decir por ultimo que es una aplicacion de consola (no hay interfaz
grafico) en la que los comandos son pulsaciones de teclas (una letra e
intro)

gracias por todo
 

Leer las respuestas

#1 hartman
08/08/2004 - 13:33 | Informe spam
bueno ya he resuelto el tema del socket, pero aun me falta el del teclado
(me da que debe ser el mas fácil, pero esto de ser nuevo...). Lo pongo aqui
por si le sirve a alguien. El problema que tengo ahora es que recibe
continuamente eventos de teclado (el switch esta en un bucle infinito y sin
pulsar ninguna tecla, esta todo el tiempo sacando por pantalla "El teclado")
Lo que yo quiero es que vaya al teclado cuando se pulse una tecla.

Basicamente creo un evento para el socket y otro para el teclado y luego los
hago funcionar con WaitForMultipleObjets

/* Evento de llegada de datos al socket */
WSAEVENT datosSocketEvnt;
// evento teclado
HANDLE tecladoEvnt;
/* array de eventos */
HANDLE misEventos[2];

tecladoEvnt = GetStdHandle(STD_INPUT_HANDLE);
// creamos el nuevo evento
datosSocketEvnt = WSACreateEvent();
WSAEventSelect(socketServidor, datosSocketEvnt, FD_READ);

// los metemos en el array
misEventos[0] = datosSocketEvnt;
misEventos[1] = tecladoEvnt;

switch (WaitForMultipleObjects(1, misEventos, FALSE, INFINITE)) {

// vendria a ser el socket de escucha
case WAIT_OBJECT_0:
fprintf(stderr, "El socket");

case WAIT_OBJECT_0 + 1:
fprintf(stderr,"El teclado");
break;
}

Preguntas similares