• Jueves 14 de Noviembre de 2024, 16:50

Autor Tema:  Problema con SOCKET/LINUX  (Leído 1855 veces)

fachamix

  • Miembro MUY activo
  • ***
  • Mensajes: 173
  • Nacionalidad: ar
    • Ver Perfil
Problema con SOCKET/LINUX
« en: Sábado 7 de Enero de 2012, 04:12 »
0
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.
La muerte vive celosa, de mi amada flor la vida. Dicen que me anda buscando, ojala si un dia me pilla. Me alle MACHAO Y CANTANDO PA QUE SE MUERA DE ENVIDIA

fachamix

  • Miembro MUY activo
  • ***
  • Mensajes: 173
  • Nacionalidad: ar
    • Ver Perfil
Re:Problema con SOCKET/LINUX
« Respuesta #1 en: Sábado 7 de Enero de 2012, 13:27 »
0
old: write(server_sockfd,buffer,sizeof(buffer));
new: write(client_sockfd,buffer,strlen(buffer));


SOLVED!
La muerte vive celosa, de mi amada flor la vida. Dicen que me anda buscando, ojala si un dia me pilla. Me alle MACHAO Y CANTANDO PA QUE SE MUERA DE ENVIDIA