SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: fachamix en Sábado 7 de Enero de 2012, 04:12

Título: Problema con SOCKET/LINUX
Publicado por: fachamix en Sábado 7 de Enero de 2012, 04:12
Tengo el siguiente codigo, un simple servidor usando sockets sobre linux.

al momento de hacer el "write" se termina la conexion ... y me canse de revisar el codigo. Me duele la cabeza.

aqui el bendito codigo.

Código: C
  1. #include <unistd.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <sys/types.h>
  6. #include <sys/socket.h>
  7. #include <sys/un.h>
  8. #include <netinet/in.h>
  9. #include <arpa/inet.h>
  10.  
  11. int main()
  12. {
  13.     printf("Iniciando servidor ...\n\r");
  14.     int server_sockfd, client_sockfd;
  15.     struct sockaddr_in server_dir, client_dir;
  16.     int server_len, client_len;
  17.     char buffer[1024];
  18.  
  19.     server_sockfd = socket(AF_INET, SOCK_STREAM, 0);
  20.     server_dir.sin_family = AF_INET;
  21.     server_dir.sin_addr.s_addr = inet_addr("10.0.0.4");
  22.     server_dir.sin_port = htons(9981);
  23.  
  24.     server_len = sizeof(server_dir);
  25.     bind(server_sockfd,(struct sockaddr*)(&server_dir),server_len);
  26.  
  27.     listen(server_sockfd,5);
  28.  
  29.     while (1)
  30.     {
  31.         printf("Esperando clientes ...\n\r");
  32.  
  33.         client_len = sizeof(client_dir);
  34.         client_sockfd = accept(server_sockfd,(struct sockaddr*)&client_dir,(socklen_t*)&client_len);
  35.         if (client_sockfd == -1)
  36.         {
  37.             perror("DEBUG");
  38.             exit(EXIT_FAILURE);
  39.         }
  40.         printf("Cliente conectado, esperando datos ...\n\r");
  41.         while (1)
  42.         {
  43.             memset(buffer,'\0',sizeof(buffer));
  44.             int temp = read(client_sockfd,buffer,sizeof(buffer));
  45.             buffer[strlen(buffer) - 2] = '\0';
  46.             printf("Leidos %d \n\r",temp);
  47.             printf("Datos recibidos [%s]\n\r",buffer);
  48.             if (strcmp(buffer,"quit") == 0)
  49.             {
  50.                 break;
  51.             }
  52.             printf("Enviando respuesta de ECHO\n\r"); //ESTO SI SE EJECUTA
  53.             strcpy(buffer,"DATOS-RECIBIDOS"); //ESTO TAMBIEN
  54.             write(server_sockfd,buffer,sizeof(buffer)); //CREO QUE AQUI ESTA EL ERROR,
  55.                                                                         //HACE QUE SE TERMINE EL PROGRAMA ABRUPTAMENTE
  56.         }
  57.         close(client_sockfd);
  58.         printf("Fin de conexion.\n\r");
  59.     }
  60.     close(server_sockfd);
  61.     exit(EXIT_SUCCESS);
  62. }
  63.  

para probar este codigo , ejecuto este servidor, y para el cliente uso TELNET apuntando a la IP.
Logro conectarme y mandar un paquete, pero automaticamente el programa termina abruptamente.

gracias por su ayuda.
Título: Re:Problema con SOCKET/LINUX
Publicado por: fachamix en Sábado 7 de Enero de 2012, 13:27
old: write(server_sockfd,buffer,sizeof(buffer));
new: write(client_sockfd,buffer,strlen(buffer));


SOLVED!