Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Socket servidor que no responde al cliente

Estas en el tema de Socket servidor que no responde al cliente en el foro de C/C++ en Foros del Web. Que tal amigos. Llevo un día entero (desde esta mañana) a ver si encuentro donde está el problema. Estoy liado creando un servidor en c ...
  #1 (permalink)  
Antiguo 20/11/2013, 13:37
 
Fecha de Ingreso: marzo-2010
Mensajes: 191
Antigüedad: 14 años, 1 mes
Puntos: 3
Pregunta Socket servidor que no responde al cliente

Que tal amigos.

Llevo un día entero (desde esta mañana) a ver si encuentro donde está el problema.

Estoy liado creando un servidor en c (y bajo windows) para recibir las peticiones. He mirado tutoriales sobre creación de sockets (tanto cliente como servidor) pero todos eran bajo linux. En mi caso (lo dicho, en Windows) estoy utilizando las librerias winsock2.h y ws2tcpip.h para el tema de las conexiones entre cliente/servidor.

De momento me conecta todo perfecto y se pasan datos sin problemas. El caso es que quiero que el servidor sea un poco personalizado, como si de una persona se tratara, que al leer según que palabras pues te responda con mensajes automáticos.

Por ejemplo, si le digo "Adios", que me responda "Que vaya bien". Si le digo "Como estas", que me responda "bien gracias". Cosas así...

Estoy haciendo if...else... pero nada, no me hace caso. Yo desde el terminal "cliente" le envio "Adios" y nada, no me responde nada.

El código es el siguiente.

Cliente:

Código C:
Ver original
  1. h = gethostbyname(argv[1]);
  2.    printf("Escribe el mensaje:\n",inet_ntoa(*(struct in_addr *)h->h_addr_list[0]));
  3.    address_ser.sin_family = h->h_addrtype;
  4.    memcpy((char *) &direccion_servidor.sin_addr.s_addr, h->h_addr_list[0], h->h_length);
  5.    direccion_servidor.sin_port = htons(6001);
  6.  
  7.  
  8.    result = connect(socket_cliente, (struct sockaddr *) &direccion_servidor, sizeof(direccion_servidor));
  9.    if (result<0) {
  10.       printf("Error: imposible conectar con el servidor\n");
  11.       exit(-1);
  12.    }
  13.  
  14.    strcpy(mensaje,"");
  15.    gets(mensaje);
  16.    result = send(socket_cliente, mensaje, strlen(mensaje)+1, 0);
  17.    if (result<0) {
  18.       printf("Error: no se ha podido enviar el mensaje\n");
  19.       exit(-1);
  20.    }

Y este es el servidor, el que quiero que responda:

Código C:
Ver original
  1. memset(mensaje,0x0,BUFFER);
  2. result = recv(socket_servidor, mensaje, BUFFER, 0);
  3. if (result<0) {
  4.    printf("error\n");
  5.    exit(-1);
  6. }
  7. else
  8. {
  9.    if (mensaje=="Adios"){
  10.               printf("Que vaya bien\n");
  11.    }
  12.    else
  13.    if (mensaje=="Como estas"){
  14.               printf("Bien gracias\n");
  15.    }
  16. }
  #2 (permalink)  
Antiguo 20/11/2013, 15:16
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 7 meses
Puntos: 83
Respuesta: Socket servidor que no responde al cliente

No puedes comparar directamente las cadenas de texto, usa strcmp:

Código C:
Ver original
  1. if(!strcmp(mensaje, "Adios")) {
  2.     //ha recibido 'Adios'
  3. }
  4. else {
  5.     //etc...
  6. }

Esto es suponiendo que recibes el mensaje correctamente. En cualquier caso te comento otra cosa: el socket servidor es el que abres para escuchar, y el socket cliente es el retorno de la funcion accept, y es sobre ese socket cliente donde haces las operaciones de recv y send; en tu codigo recibes datos de un socket llamado socket_servidor que para que funcione tiene que ser el retorno de la funcion accept, es decir el socket cliente o dicho de otra forma has nombrado socket_servidor al socket cliente. Por contra, si has nombrado bien las variables y socket_servidor es el que escucha entonces esto no puede funcionar nunca.

En casos como este donde es facil confundir cosas y obtener errores lo principal es (junto con indentar y documentar bien el codigo) declarar variables y funciones que se identifiquen lo maximo posible con lo que representan o lo que hacen. Parece una tonteria, pero te puedes ahorrar mas de un fin de semana dando vueltas a algo muy simple solo por no nombrar correctamente. No digo que sea el caso (no has colgado todo el codigo), pero por lo que veo es lo que deduzco.

Saludos
vosk
  #3 (permalink)  
Antiguo 20/11/2013, 17:18
 
Fecha de Ingreso: marzo-2010
Mensajes: 191
Antigüedad: 14 años, 1 mes
Puntos: 3
Respuesta: Socket servidor que no responde al cliente

Amigo/a Vosk, me ha funcionado a la perfección!

Que ilusión al escribir y ver que el server respondía a lo que comentaba. Perfecto!

Un fuerte abrazo!

Etiquetas: cliente, servidor, socket
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:15.