el problema es que no estas tomando en cuenta el \n que queda al final de buffer_c cuando lees algo de stdin, solo pasa por el pipe al hacer un <ENTER> (en Linux \n, en Windows \r\n si mal no recuerdo) cuando usas el fgets la cadena se termina con un \n por lo que las comparaciones nunca van a dar iguales

soluciones:
i) agregar el \n a la cadena a comparar
ej: strcmp ("/help\n", buffer_c)

ii) reemplazar fgets con scanf (scanf no incluye el \n )
ej: scanf ("%s",buffer_c)

saludos

--------------------------------------------------
From: "Leonardo Rios" <[EMAIL PROTECTED]>
Sent: Thursday, May 08, 2008 5:39 PM
To: <[email protected]>
Subject: [Prog] Re: RE.enviar y recibir mensajes en socket conectados

(Juan Alejandro Knight) wrote:
cuando me refiero a "adentro" es el uso de scope de una funcion estructurada cuando a un if un le pones {...} es para que se ejecute lo de adentro _solo_
si se cumple la condicion
o que haces es similar a lo siguiente
if (i == 0) {
   if (i > 0) { /*nunca va a ser verdadero esto porque i es cero*/
       .....
   }
}

lo desarrollo mas claro abajo, comentando cual es el error e indentando para
mayor claridad

while(1)
{
 ....
 if (((strcmp ("/help", buffer_c) == 0)) || ((strcmp ("/h", buffer_c) ==
0)))
 {
     {/*llave innecesaria*/
     printf("Help ... /quit --> cliente cierra el socket\n");
     }/*llave innecesaria*/
     if (strcmp("/quit", buffer_c) == 0)
{ /*nunca entra a este if porque buffer_c es /help o /h => esta dentro
del if anterior*/
         printf("Se ha salido del chat\n");
         close(sockfd);
     }
 }
 ...
}

solucion:
sacar el if de quit afuera y juntar con un else

while(1)
{
 ....
 if (((strcmp ("/help", buffer_c) == 0)) || ((strcmp ("/h", buffer_c) ==
0)))
{ /*esta llave se puede eliminar junto con la siguiente porque adentro hay
una sola instruccion*/
   /*las llaves innecesarias se eliminaron*/
   printf("Help ... /quit --> cliente cierra el socket\n");
 }
 else if (strcmp("/quit", buffer_c) == 0)
 { /*este if salio afuera del if anterior y se conecto con un else*/
   printf("Se ha salido del chat\n");
   close(sockfd);
 }
 ...
}


alejandro, todavia sigo con dolores de cabeza. A pesar de estas
modificaciones que he hecho, todavia no me toma los "/quit" "/h"
"help"



while(1)
{
memset(buffer_c, 0, sizeof(buffer_c));
printf("Mensaje para enviar al servidor -> ");
fgets(buffer_c, sizeof(buffer_c), stdin);

if (((strcmp ("/help", buffer_c) == 0)) || ((strcmp ("/h", buffer_c) == 0)))
{


printf("Help ... /quit --> cliente cierra el socket\n");
}
else if (strcmp("/quit", buffer_c) == 0)
{
                     printf("Se ha salido del chat\n");
                              close(sockfd);

                }

n = write(sockfd, buffer_c, strlen(buffer_c)+1);

     if (n <= 0) {
printf("error en write()");
close(sockfd);
exit(-1);
}

printf("Mensaje Ok\n");
}




--
/* Leonardo Rios
* rios[dot]lj[at]gmail[dot]com
*/
_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion




No virus found in this incoming message.
Checked by AVG.
Version: 8.0.100 / Virus Database: 269.23.10/1421 - Release Date: 07/05/2008 05:23 p.m.

__________________________________________________
Correo Yahoo!
Espacio para todos tus mensajes, antivirus y antispam ¡gratis! ¡Abrí tu cuenta ya! - http://correo.yahoo.com.ar

_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion

Responder a