[PB] Socket linux en C

Socket linux en C [PB] - C - Programmation

Marsh Posté le 22-04-2005 à 14:19:23    

Hello all,
voila j'ai voulu jeter un oeil aux linux socket en C, j'ai fait un petit code (server/client). Le server a l'air de fonctionner sans problème, mais le client n'arrive pas à debuter une connexion sur une socket : la
fonction connect() retourne une erreur, je n'ai pas trouve d'ou cela pouvaiot venir, voici mon code :
 
Serveur :

Code :
  1. #include <sys/socket.h>
  2. #include <netinet/in.h>
  3. #include <unistd.h>
  4. #include <stdlib.h>
  5. #include <stdio.h>
  6. #include <time.h>
  7. #define MAX_RECEPT 100
  8. int main(int argc, char* argv[])
  9. {
  10.    if(argc < 2)
  11.    {
  12.       printf("Parameters error !\n" );
  13.       return EXIT_FAILURE;
  14.    }
  15.    int socket_server, socket_client, server_len, client_len;
  16.    struct sockaddr_in sockaddr_server, sockaddr_client;
  17.    char buffer[MAX_RECEPT];
  18.    time_t date;
  19.  
  20.    FILE* f = fopen(argv[1], "a" );
  21.  
  22.    if((socket_server = socket(AF_INET, SOCK_STREAM, 0)) < 0)
  23.    {
  24.       printf("Socket creation error !\n" );
  25.       return EXIT_FAILURE;
  26.    }
  27.    sockaddr_server.sin_family = AF_INET;
  28.    sockaddr_server.sin_port = 6667;
  29.    sockaddr_server.sin_addr.s_addr = inet_addr("127.0.0.1" );
  30.  
  31.    server_len = sizeof(sockaddr_server);
  32.    client_len = sizeof(sockaddr_client);
  33.  
  34.    if(bind(socket_server, (struct sockaddr*)&sockaddr_server, server_len) < 0)
  35.    {
  36.       printf("Socket bind error !\n" );
  37.       return EXIT_FAILURE;
  38.    }
  39.  
  40.    if(listen(socket_server, 10) < 0)
  41.    {
  42.       printf("Socket listen error !\n" );
  43.       return EXIT_FAILURE;
  44.    }
  45.    printf("[~]Waiting connection... \n" );
  46.    socket_client = accept(socket_server, (struct sockaddr*)&sockaddr_client, &client_len);
  47.    printf("[~]Established connection !\n" );
  48.  
  49.    time(&date);
  50.    fprintf(f, "[!]Established connection at %s\n", ctime(&date));
  51.  
  52.    while(1)
  53.    {
  54.       if(read(socket_client, &buffer, MAX_RECEPT) < 0)
  55.       {
  56.          printf("Socket read error !" );
  57.          return EXIT_FAILURE;
  58.       } 
  59.      
  60.       printf("From client : %s\n\n", buffer); 
  61.       fprintf(f, "From client : %s\n", buffer); 
  62.    }
  63.      
  64.    close(socket_client);
  65.    printf("Saving in %s\n", argv[1]);
  66.  
  67.    return 0;
  68. }


 
Client :

Code :
  1. #include <sys/socket.h>
  2. #include <sys/types.h>
  3. #include <netinet/in.h>
  4. #include <unistd.h>
  5. #include <stdlib.h>
  6. #define MAX_SEND 100
  7. int main()
  8. {
  9.    int socket_connect, sockaddr_len;
  10.    struct sockaddr_in sockaddr_connect;
  11.    char buffer[MAX_SEND];
  12.  
  13.    if(socket_connect = socket(AF_INET, SOCK_STREAM, 0) < 0)
  14.    {
  15.       printf("Socket creation errror !\n" );
  16.       return EXIT_FAILURE;
  17.    }
  18.  
  19.    sockaddr_connect.sin_family = AF_INET;
  20.    sockaddr_connect.sin_addr.s_addr = inet_addr("127.0.0.1" );
  21.    sockaddr_connect.sin_port = 6667;
  22.  
  23.    sockaddr_len = sizeof(sockaddr_connect);
  24.  
  25.    if(connect(socket_connect, (struct sockaddr*)&sockaddr_connect, sockaddr_len) < 0)
  26.    {
  27.       printf("Socket connection error !\n" );
  28.       return EXIT_FAILURE;
  29.    }
  30.  
  31.    while(1)
  32.    {
  33.       printf("send>" );
  34.       scanf("%s", &buffer);
  35.       write(socket_connect, buffer, MAX_SEND);
  36.    }
  37.  
  38.    close(socket_connect);
  39.  
  40.    return 0;
  41. }


 
Si vous pourriez m'aider, ce serait vraiment sympa :)
Bye.
PS : je suis un peu paumé aux niveaux des fichiers d'en-tête à ajouter, si il en manque oui il y'en a en trop, j'accepte vos remarques, merci.

Reply

Marsh Posté le 22-04-2005 à 14:19:23   

Reply

Marsh Posté le 22-04-2005 à 15:33:16    

Personne n'a une petite idee ? :(

Reply

Marsh Posté le 22-04-2005 à 17:40:53    

taron_31 a écrit :

Personne n'a une petite idee ? :(


 
Sincèrement, je viens de rentrer du boulot et j'ai pas trop envie de chercher ce soir dans ton code ce qui pourrait faire que ça plante. Juste un truc en passant: Pour ton serveur, t'as pas besoin d'y mettre sa propre adresse "127.0.0.1". Tu peux y mettre la constante "INADDR_ANY". en effet, un serveur se connait déjà lui-même !!!
 
Donc, soit tu trouves tout seul le détail qui ferait que ça plante, soit qqun d'autre te trouve ce détail qui doit être une minuscule erreur de parenthèse ou autre, soit tu vas sur mon site dans la rubrique "mes cours" j'y ai mis un cours sur les sockets (format MsWord) avec différents exemples (TCP, UDP, etc...)
 
Bon courage...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed