Foros del Web » Programación para mayores de 30 ;) » Programación General »

2 cuestiones: sockets con c

Estas en el tema de 2 cuestiones: sockets con c en el foro de Programación General en Foros del Web. Buenas, pues como ya sabeis estoy haciendo un programilla con sockets. El tema consiste en que un servidor almacena nombres de clientes con sus ips ...
  #1 (permalink)  
Antiguo 18/03/2005, 13:51
 
Fecha de Ingreso: junio-2004
Mensajes: 283
Antigüedad: 20 años, 5 meses
Puntos: 0
2 cuestiones: sockets con c

Buenas, pues como ya sabeis estoy haciendo un programilla con sockets. El tema consiste en que un servidor almacena nombres de clientes con sus ips en un fichero. Cuando algun cliente pide una ip de otro cliente el servidor se la da. Hasta ahora ya tengo hecho el registro de clientes en el fichero, y la entrega de ips a los clientes, pero tengo 2 agujeros:

A) El primero, cuando el servidor envia una ip al cliente que la solicita, el cliente no la recibe hasta que no aprieta enter. Es como si se quedara en el buffer. Cuando el cliente pulsa enter ya la recibe.

El envio es este:
send(newsock,&(reg_actual.ipreg),BUFFSIZE,0);

En cambio si solo envio esto si funciona, en el mismo lugar
send(newsock,"200 ",BUFFSIZE,0);

Qué puede ser?

B) Quiero controlar si algun cliente se da de baja del servidor para ponerle en el fichero que no esta presente. Pero no sé como hacerlo, porque el cliente cuando se da de baja hace simplemente QUIT. Por tanto deberia tener identificado al cliente en todo momento por su nombre de usuario, pero este nombre lo recojo dentro de una funcion y no lo tengo presente en todo el programa. No se si me he explicado bien.

Bueno, lo siento por el toston, toda ayuda sera buena. Gracias!!!!
__________________
pOrtfOliO
  #2 (permalink)  
Antiguo 18/03/2005, 14:22
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 6 meses
Puntos: 74
En cuanto a la primera pregunta habría que ver exactamente como está recibiendo los datos el cliente.

Para la segunda sería my fácil solucionarlo si estuvieras programando en C++, espero que así sea, con hacer una clase cliente y crear un objeto por cada una de las conexiones que se vayan creando podrías tener encapsulados con gran facilidad todos los datos del cliente.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 18/03/2005, 14:49
 
Fecha de Ingreso: junio-2004
Mensajes: 283
Antigüedad: 20 años, 5 meses
Puntos: 0
Gracias Eternal Idol, siempre tan atento.. :D

La primera cuestion ya está solucionada..ahora solo me queda la segunda, un problema...el codigo es en c... no hay ninguna otra posible salida para eso?

gracias!
__________________
pOrtfOliO
  #4 (permalink)  
Antiguo 18/03/2005, 15:43
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 6 meses
Puntos: 74
De nadas

Podes tener un array de estructuras, con una variable que marque cuentas hay e ir escribiendo en la primera que quede vacia al cerrar una sesión.

La estructura podría ser algo así:

Código:
struct clientes
{
  char userName[256];
  char ip[16];
  int ID;
  //etc etc etc
};

clientes conexiones[500]; //esto seria mucho mejor hacerlo dinamico
Una función para meter un cliente en la lista, otra para borrar y otra para buscar un cliente, más o menos así lo podrías implementar sin gran dificultad.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:37.