/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

servidor de chat compartido

 
      Índice del Foro elrincondelc.com -> Programación en Servidores
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
Iosune



Registrado: 01 Sep 2008
Mensajes: 1

MensajePublicado: 01/09/2008 5:22 am
Título: servidor de chat compartido

Hola!
Estoy haciendo un servidor de chat compartido en c que utiliza la función select y me he topado con un problema. He conseguido que se puedan conectar varios clientes y que se envien mensajes, pero quiero hacer unos comandos que ahora no me funcionan. Por un lado quiero hacer que ningún cliente pueda hablar si no ha ejecutado el comando /nombre para asignarse un nick. También quiero que con el comando /lista salga la lista de usuarios, tanto con nombre como invisibles. Y también quiero que con el comando /m se envien mensajes privados. Pues bien, intentando hacerlo he estropeado algo que no se lo que es, antes iba el comando nombre y ahora no me funciona ninguno. Había cambiado la función que sirve para aceptar un cliente, antes de eso funcionaba, aunque creo que he cambiado algo mas. Os pongo el código de la función que sirve para lo de los comandos, por si alguien me puediera ayudar, es que soy bastante novata con c Sad . Muchas gracias de antemano!!!!!!! Muacks!!!


void evaluar_linea(char buf[2000],char *nombre[10],int descriptores[10],int cont){
char *ptr;
char aux_buf[2000],cadena_corta[100]; /*Utilizamos corta para el cambio de nick*/
int i,priv=0,aux_int;
strcpy(aux_buf,buf);
ptr=strtok(aux_buf," ");
printf("SERVIDOR : Evaluando linea enviada por %s\n",nombre[cont]);

if(strcmp("/nombre",ptr)==0){ /*Se ejecuta el comando nombre*/
priv=1;
printf("SERVIDOR : %s ejecuta comando /nombre\n",nombre[cont]);
ptr=strtok(NULL," ");
free(nombre[cont]);
nombre[cont]=(char *)malloc((strlen(ptr))*sizeof(char));
strcpy(nombre[cont],ptr);
printf("SERVIDOR : Usuario%d es ahora %s\n",cont,nombre[cont]);
sprintf(cadena_corta,"SERVIDOR : Usuario%d es ahora %s\0\n",cont,ptr);
for(i=0;i<MAX_CLIENTES;i++){
if(descriptores[i]!=-1){
write(descriptores[i],cadena_corta,strlen(cadena_corta));
}
}
}
if(strcmp("/lista\n",ptr)==0){ /*Se ejecuta el comando lista*/
priv=1;
for(i=0;i<MAX_CLIENTES;i++){
if (descriptores[i]!=-1){
sprintf(aux_buf,"%d : %s \n",i,nombre[i]);
write(descriptores[cont],aux_buf,strlen(aux_buf));
}
}
}
if(strcmp("/m",ptr)==0){ /*Se ejecuta el comando para mensajes privados*/
priv=1;
ptr=strtok(NULL," ");
sscanf(ptr,"%d",&aux_int);
printf("SERVIDOR : %s envia un mensaje privado a %s\n",nombre[cont],nombre[aux_int]);
for(i=0;i<MAX_CLIENTES;i++){
if(aux_int==i){
ptr=strtok(NULL,"\n");
sprintf(cadena_corta,"%s te envia un mensaje privado : %s\n",nombre[cont],ptr);
write(descriptores[i],cadena_corta,strlen(cadena_corta));
}
}
}

else {
if (priv==0)
{
sprintf(aux_buf,"Usuario%d",cont);
if(strcmp(aux_buf,nombre[cont])!=0){
sprintf(aux_buf,"%s dice : %s\0\n",nombre[cont],buf);
for(i=0;i<MAX_CLIENTES;i++){
if(descriptores[i]!=-1){
write(descriptores[i],aux_buf,strlen(aux_buf));
}
}
}
else{
sprintf(aux_buf,"SERVIDOR : No puedes enviar mensajes hasta que elijas nombre. Para ello utiliza el comando /nombre\n",descriptores[cont]);
write(descriptores[cont],aux_buf,strlen(aux_buf));
}
}
}
}


El código del lugar donde llamo a esta función es el siguiente:

for(i=0;i < MAX_CLIENTES;i++){
if(fd[i]!=-1){
if(FD_ISSET(fd[i],&leer)){
leido=read(fd[i],/*&*/buffer,2000);
if(leido>0){
buffer[leido]='\0';
evaluar_linea(buffer,cliente,fd,i);
}
else {
close(fd[i]);
fd[i]=-1;
numclientes--;
printf("Ahora hay %d clientes\n",numclientes);
}
}
}
Volver arriba
cris7ian



Registrado: 19 Nov 2010
Mensajes: 19

MensajePublicado: 25/11/2010 5:25 am
Título:

yo tengo un chat pero en poython por si lo deseas se que no tiene nada que evr con tu tema pero te hago mi comentario, si lo deseas respondeme nomas, saludos
Volver arriba
      Índice del Foro elrincondelc.com -> Programación en Servidores
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com