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