IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

[socket] socket operation on non socket


Sujet :

Linux

  1. #1
    Membre averti Avatar de let_me_in
    Inscrit en
    Mai 2005
    Messages
    441
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 441
    Points : 437
    Points
    437
    Par défaut [socket] socket operation on non socket
    salut tout le monde,
    voici mon code :
    client:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
          #include <sys/socket.h>
          #include <sys/types.h>
          #include <netinet/in.h>
          #include <unistd.h>
          #include <stdlib.h>
          #include <errno.h>	
         #include <string.h>	
          #include <stdio.h>
     
          #define MAX_SEND 100
     
          int main()
     
          {
     
            int socket_connect, sockaddr_len;
     
            struct sockaddr_in sockaddr_connect,merde;
     
            char buffer[MAX_SEND];
     
            sockaddr_connect.sin_family = AF_INET;
     
            sockaddr_connect.sin_addr.s_addr = inet_addr("127.0.0.1");
     
            sockaddr_connect.sin_port = htons(6668);
     
    	sockaddr_connect.sin_zero[8]=0;
     
     
    	if(socket_connect = socket(AF_INET, SOCK_STREAM, 0) < 0)
     
            {
     
               printf("Socket creation errror !\n" );
     
               return EXIT_FAILURE;
     
            }
     
           printf("socket=%d\n",socket_connect);
     
            if(connect(socket_connect, (struct sockaddr*)&sockaddr_connect, sizeof(sockaddr_connect)) < 0)
     
            {
     
               printf("Socket connection error !\n" );
    	   perror("erreur");
     
               return EXIT_FAILURE;
     
            }
     
     
     
            while(1)
     
            {
     
               printf("send>" );
     
               scanf("%s", &buffer);
     
               write(socket_connect, buffer, MAX_SEND);
     
            }
     
     
     
            close(socket_connect);
     
            return 0;
     
          }
    serveur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
        #include <sys/socket.h>
        #include <netinet/in.h>
        #include <unistd.h>
        #include <stdlib.h>
        #include <stdio.h>
        #include <time.h>
        #include <errno.h>	
     
        #define MAX_RECEPT 100
     
     
     
         int main(int argc, char* argv[])
     
          {
     
            if(argc < 2)
     
            {
               printf("Parameters error !\n" );
               return EXIT_FAILURE;
            }
            int socket_server, socket_client, server_len, client_len;
            struct sockaddr_in sockaddr_server, sockaddr_client;
            char buffer[MAX_RECEPT];
    	char buff[50];
            time_t date;
            FILE* f = fopen(argv[1], "a" );
            if((socket_server = socket(AF_INET, SOCK_STREAM, 0)) < 0)
              {
               printf("Socket creation error !\n" );
               return EXIT_FAILURE;
             }
            sockaddr_server.sin_family = AF_INET;
            sockaddr_server.sin_port = htons(6668);
            sockaddr_server.sin_addr.s_addr = INADDR_ANY;
            server_len = sizeof(sockaddr_server);
            client_len = sizeof(sockaddr_client);
            if(bind(socket_server, (struct sockaddr*)&sockaddr_server, server_len) < 0)
            {
     
               printf("Socket bind error !\n" );
    	   printf("%d\n",errno);
    	  perror("erreur :");
     
               return EXIT_FAILURE;
     
            }
     
            if(listen(socket_server, 10) < 0)
     
            {
     
               printf("Socket listen error !\n" );
     
               return EXIT_FAILURE;
     
            }
     
     
     
            printf("[~]Waiting connection... \n" );
     
            socket_client = accept(socket_server, (struct sockaddr*)&sockaddr_client, &client_len);
     
            printf("[~]Established connection !\n" );
     
     
     
            time(&date);
     
            fprintf(f, "[!]Established connection at %s\n", ctime(&date));
     
     
            while(1)
     
            {
     
               if(read(socket_client, &buffer, MAX_RECEPT) < 0)
     
               {
     
                  printf("Socket read error !" );
     
                  return EXIT_FAILURE;
     
               }  
     
     
     
               printf("From client : %s\n\n", buffer);  
     
               fprintf(f, "From client : %s\n", buffer);  
     
            }
     
     
     
            close(socket_client);
     
            printf("Saving in %s\n", argv[1]);
     
     
     
            return 0;
     
          }
    le serveur se lance bel et bien, mais le client me retourne cette erreur, et connect retourne 0 (j'ai lu quelque part que ceci n'est pas un probleme du fait que c'est >0).

    une idee la dessus

    merci d'avance.

  2. #2
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Il faut simplement faire tous les tests nécessaires et surtout compiler avec les bonnes options...
    monclient.c: In function ‘main’:
    monclient.c:24: warning: implicit declaration of function ‘inet_addr’
    monclient.c:31: warning: suggest parentheses around assignment used as truth value
    monclient.c:62: warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘char (*)[100]’
    monclient.c:18: warning: unused variable ‘merde’
    monclient.c:16: warning: unused variable ‘sockaddr_len’
    Voilà une version plus propre :

    Le serveur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
     
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>
    #include <errno.h>  
     
    #define MAX_RECEPT 100
     
    int main(int argc, char* argv[])
    {
        int socket_server, socket_client, server_len, rd;
        socklen_t client_len;
        struct sockaddr_in sockaddr_server, sockaddr_client;
        char buffer[MAX_RECEPT];
        time_t date;
     
        FILE* f = fopen(argv[1], "a" );
     
        /* Test d'ouverture */
        if(f==NULL) {
            fprintf(stderr, "Probleme d'ouverture du fichier\n");
            return EXIT_FAILURE;
        }
     
        if(argc < 2)
        {
            printf("Parameters error !\n" );
            return EXIT_FAILURE;
        }
     
        if((socket_server = socket(AF_INET, SOCK_STREAM, 0)) < 0)
        {
            printf("Socket creation error !\n" );
            return EXIT_FAILURE;
        }
        sockaddr_server.sin_family = AF_INET;
        sockaddr_server.sin_port = htons(6668);
        sockaddr_server.sin_addr.s_addr = INADDR_ANY;
        server_len = sizeof(sockaddr_server);
        client_len = sizeof(sockaddr_client);
     
        if(bind(socket_server, (struct sockaddr*)&sockaddr_server, server_len) < 0) {
            printf("Socket bind error !\n" );
            printf("%d\n",errno);
            perror("erreur :");
            return EXIT_FAILURE;
        }
     
        if(listen(socket_server, 10) < 0) {
            printf("Socket listen error !\n" );
            return EXIT_FAILURE;
        }
     
     
     
        printf("[~]Waiting connection... \n" );
     
        socket_client = accept(socket_server, (struct sockaddr*)&sockaddr_client, &client_len);
     
        if(socket_client == -1) {
            fprintf(stderr, "Problem with the accept\n");
            return EXIT_FAILURE;
        }
     
        printf("[~]Established connection !\n" );
     
        time(&date);
     
        fprintf(f, "[!]Established connection at %s\n", ctime(&date));
     
        while(1) {
     
            rd = read(socket_client, &buffer, MAX_RECEPT);
            if(rd < 0) {
                printf("Socket read error !" );
                return EXIT_FAILURE;
            }  
     
            if(rd == 0) {
                printf("Socket closed\n");
                break;
            }
     
            printf("From client : %s\n\n", buffer);  
            fprintf(f, "From client : %s\n", buffer);  
        }
     
        close(socket_client);
     
        printf("Saving in %s\n", argv[1]);
     
        return EXIT_SUCCESS;
    }
    Le client :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    #include <arpa/inet.h>
    #include <sys/socket.h>
    #include <sys/types.h>
    #include <netinet/in.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include <errno.h>  
    #include <string.h>    
    #include <stdio.h>
     
    #define MAX_SEND 100
     
    int main()
    {
        int socket_connect;
        struct sockaddr_in sockaddr_connect;
        char buffer[MAX_SEND];
        sockaddr_connect.sin_family = AF_INET;
        sockaddr_connect.sin_addr.s_addr = inet_addr("127.0.0.1");
        sockaddr_connect.sin_port = htons(6668);
        sockaddr_connect.sin_zero[8]=0;
     
        if((socket_connect = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
            printf("Socket creation errror !\n" );
            return EXIT_FAILURE;
        }
     
        printf("socket=%d\n",socket_connect);
     
        if(connect(socket_connect, (struct sockaddr*)&sockaddr_connect, sizeof(sockaddr_connect)) < 0) {
            printf("Socket connection error !\n" );
            perror("erreur");
            return EXIT_FAILURE;
        }
     
        while(1) {
            int wb;
            printf("send>" );
     
            if(fgets(buffer, sizeof(buffer), stdin)==NULL) {
                printf("Problem with fgets\n");
                break;
            }
     
            wb = write(socket_connect, buffer, MAX_SEND);
            printf("wb %d\n",wb);
            if(wb != MAX_SEND) {
                fprintf(stderr,"Erreur with writing to server\n");
                return EXIT_FAILURE;
            }
        }
     
        close(socket_connect);
        return EXIT_SUCCESS;
    }
    Jc

Discussions similaires

  1. [socket-pthread-linux]printf non executé
    Par sebatlante dans le forum C
    Réponses: 4
    Dernier message: 11/04/2011, 11h34
  2. [D2006][Socket]Mode bloquant vs non-bloquant
    Par femtosa dans le forum Delphi
    Réponses: 5
    Dernier message: 05/09/2007, 14h37
  3. [linux] Socket operation on non socket
    Par let_me_in dans le forum Réseau
    Réponses: 11
    Dernier message: 19/06/2007, 15h38
  4. [Socket] Communication à l'aide de sockets (théorie)
    Par nicolas.pied dans le forum C++
    Réponses: 1
    Dernier message: 29/11/2005, 17h33
  5. [sockets]Comment intéragir avec une socket php ?
    Par le Daoud dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 31/10/2005, 10h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo