hago un re-quote
fijate que *dentro* de las llaves del primer if (valida si es help) esta el
segundo if (valida si es quit)
por ende nunca te va a reconocer el fin de transmision que planteas

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);
 }
 ...
}

--------------------------------------------------
From: "Leonardo Rios" <[EMAIL PROTECTED]>
Sent: Tuesday, May 06, 2008 7:05 PM
To: <[email protected]>
Subject: [Prog] RE.enviar y recibir mensajes en socket conectados

tu problema es como estructuraste el if con las llaves {}

if (((strcmp ("/help", buffer_c) == 0)) || ((strcmp ("/h", buffer_c) ==
0))) {
{
printf("Comando para ayuda");
}

if (strcmp("/quit", buffer_c) == 0) {
printf("Se ha salido del chat");
close(sockfd);
 }
}}

fijate que *dentro* de las llaves del primer if (valida si es help) esta el
segundo if (valida si es quit)
por ende nunca te va a reconocer el fin de transmision que planteas


Lo hice de esta forma, pero igualmente no me reconoce el /quit o el /help


while(1)
{

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");
}
if (strcmp("/quit", buffer_c) == 0)
{
                     printf("Se ha salido del chat\n");
                              close(sockfd);
                    }
                }

n = send(sockfd, buffer_c, strlen(buffer_c), 0);

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

printf("Message Ok\n");


}

Manda los mensajes correctamente, pero no me toma el "/quit" ni el "/help" o "h"

--
/* 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.9/1417 - Release Date: 06/05/2008 08:07 a.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