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
usando indentacion en el codigo, estos tipos de equivocaciones los
identificas rapido
ademas, deberías utilizar las funciones send y recv (como ya te respondieron
en el ultimo hilo que abriste)
otro error que con tu ejemplo puede funcionar es que estas suponiendo que
todo el buffer se envia utilizando un write/send
la funcion send puede que no envie todo el buffer de una, por ese motivo el
valor de retorno es la cantidad de bytes que pudo mandar
lo que deberias hacer es hacer un ciclo hasta que la cantidad de bytes
enviados cumpla con el total
otro detalle es que deberías utilizar aritmetica de punteros para correr el
puntero del buffer, porque si al send siempre le mandas el mismo buffer te
va a enviar siempre los primeros bytes
podrias hacer los siguiente:
int counter = 0;
int bytes = 0;
while (counter < len) {
if ((bytes = send( sockfd, buf + counter, len - counter, 0 )) < 0) {
//ERROR
}
else
counter += bytes;
}
fijate que en el parametro como buf es un char* se le hace
buf + counter
con esto siempre manda el buffer que todavia no mando
saludos
--------------------------------------------------
From: "Leonardo Rios" <[EMAIL PROTECTED]>
Sent: Friday, May 02, 2008 12:38 PM
To: <[email protected]>
Subject: [Prog] enviar y recibir mensajes en socket conectados
Hola, estoy haciendo una aplicacion que envia mensajes al servidor por
socket. Los mensajes los envia bien y el servidor los recibe
correctamente. El problema esta en que el cliente no interpreta lo que
esta en el buffer_c "/h" "/help" "/quit". Hice con las sentencias
while(1) y un If si encuentra estas cadenas ..
#cliente
while(1)
{
printf("Mensaje para enviar al servidor-> ");
fgets(buffer_c, sizeof(buffer_c), stdin);
if (write(sockfd, buffer_c, strlen(buffer_c)) < 0) {
printf("eror en write()");
close(sockfd);
exit(-1);
}
printf("Mensaje enviado al servidor\n");
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);
}
}}
#server
while (1) {
read(newsocket, buffer_s, sizeof(buffer_s));
printf("mensaje recibido del cliente: %s", buffer_s);
}
--
/* 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.7/1411 - Release Date:
02/05/2008 08:02 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