Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1188 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [PB] Socket linux en C

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PB] Socket linux en C

n°1056544
taron_31
Posté le 22-04-2005 à 14:19:23  profilanswer
 

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.

mood
Publicité
Posté le 22-04-2005 à 14:19:23  profilanswer
 

n°1056739
taron_31
Posté le 22-04-2005 à 15:33:16  profilanswer
 

Personne n'a une petite idee ? :(

n°1057019
Sve@r
Posté le 22-04-2005 à 17:40:53  profilanswer
 

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.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [PB] Socket linux en C

 

Sujets relatifs
[OpenGL] Quel langage pour une meilleure portabilité Win/Linuxcompile sous linux marche pas alors que sous windows fonctionne
[C] impossible d'utiliser les thread sous linux problème de linkerediteur genre notepad++ pour linux
driver linux[JAVA] Récupérer le résultat d'une commande linux?
BOOL pas reconnu sous LINUX[JAVA] Lancer une commande linux à partir d'un prog java
[C/Linux] Savoir si une Caméra est branché sur la carte d'aquisition.Probleme de librairie windows/linux
Plus de sujets relatifs à : [PB] Socket linux en C


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR