Discussion: TCP client/serveur

  1. #1
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    avril 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : avril 2017
    Messages : 6
    Points : 4
    Points
    4

    Par défaut TCP client/serveur

    Bonjour ,
    pour terminer mon projet de Bts ,je dois réaliser un client/Serveur Tcp.
    Le client vas récupérer dans un 1er temps des donnés sur une machine industriel puis il dois envoyer les données sur mon serveur tcp,Lors que j'exécute mon programme la socket qui dois envoyé les donné ne fonctionne pas ,je suis vraiment bloqué ,il me reste trés peu de temps ,si quelqu'un pourrais m'aider ca sera vraiment sympa.




    voici mon code de 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
    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
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
     
    #include <stdio.h>
    #include <conio.h>
    #include <unistd.h>
     
    /*************      SORTIES   ***********************/
    #define EJECTION_PIECE                0x01   // bit 0
    #define ASPIRATION_ONA                0x02   // bit 1
    #define EXPULSION_VENTOUSE            0x04   // bit 2
    #define BRAS_POSITION_MAGASINA         0x08   // bit 3
    #define BRAS_POSITION_MODULE_CONTROLEA 0x10   // bit 4
     
    /*************     ENTREES   ************************/
    #define NON_DISPONIBLE                0x01  // bit 0   1   1
    #define EJECTION_PIECE_RETRACTE       0x02  // bit 1   1   0
    #define EJECTION_PIECE_AVANCE         0x04  // bit 2   0   1
    #define ASPIRATION_ON                 0x08  // bit 3   0   0
    #define BRAS_POSITION_MAGASIN         0x10  // bit 4   0   0
    #define BRAS_POSITION_MODULE_CONTROLE 0x20  // bit 5   0   0
    #define RESERVE_PIECE_VIDE            0x40  // bit 6   1   0
    #define ASPIRATION_OFF                0x80  // bit 7   1   1
     
    /*************     PORT & IP  ************************/
    #define  PORT1  502
    #define  PORT2 30000
    #define  IP2   "192.168.0.11"
     
    SOCKET id_de_la_socket;
    SOCKET  id_de_la_socket2 ;
     
    SOCKADDR_IN info_Trame;
    SOCKADDR_IN envoie_donnee_serveur;
     
    int nombre_de_caractere;
    int nombre_de_caractere_recu ;
    int nombre_de_caractere_recu_Capteur;
    int nombre_caractere_recu_serveur;
    int nombre_de_caractere_envoi_serveur;
    int nombre_de_caractere_Capteur;
     
    char buffer1[50];
    char buffer2[50];
    char buffer3[50];
     
    unsigned char sorties=0x00;
    unsigned char sorties1=0x01;
     
     
    SOCKET configurationTCP(char ip[])
    {
       SOCKET id_de_la_socket;
       SOCKET  id_de_la_socket2 ;
        WSADATA initialisation_win32; /// Variable pour récupérer la structure d'information sur l'initialisation
        int erreur;
        SOCKADDR_IN info_Trame; // la structure pour serveur
        SOCKADDR_IN envoie_donnee_serveur;
     
        printf("\n  programme client tcp\n");
     
        erreur=WSAStartup(MAKEWORD(2,2),&initialisation_win32);
        if (erreur!=0)
            printf("\n impossible d'initialiser Winsock  : %d %d",erreur,WSAGetLastError());
        else
            printf("\n WSAStartup  réussi ");
     
        // Ouverture d'une Socket
        //id_de_la_socket=socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);   /// Ouverture d'une Socket
        id_de_la_socket=socket(AF_INET,SOCK_STREAM,0);
        printf("id socket =%d\n",id_de_la_socket);
        if (id_de_la_socket==INVALID_SOCKET)
            printf("\n impossible de creer la socket  : %d ",WSAGetLastError());
        else
            printf("\n socket valider \n ");
     
     
          // Ouverture d'une Socket2
          id_de_la_socket2=socket(AF_INET,SOCK_STREAM,0);
        if (id_de_la_socket2==INVALID_SOCKET)
            printf("\nDesole, je ne peux pas creer la socket du a l'erreur : %d",WSAGetLastError());
        else
            printf("\n socket 2 valider \n ");
     
     
        // ********************************************************
        // Etablissement de l'ouverture de session
        // ********************************************************
        info_Trame.sin_family=AF_INET;
        info_Trame.sin_addr.s_addr=inet_addr(ip);
        info_Trame.sin_port = htons(502);
        erreur=connect(id_de_la_socket,(struct sockaddr*)&info_Trame,sizeof(info_Trame));
        if (erreur!=0)
            printf("\n impossible d'ouvrir la session TCP : %d %d",erreur,WSAGetLastError());
        else
            printf("\n OUVERTURE DE SESSION TCP : OK \n ");
        return id_de_la_socket;
     
     
     //Partie envois serveur Tcp
     
        envoie_donnee_serveur.sin_family=AF_INET;
        envoie_donnee_serveur.sin_addr.s_addr=inet_addr(IP2); // l'adresse IP de votre serveur
        envoie_donnee_serveur.sin_port=htons(502); // Port écouté du serveur (30000)
     
        erreur=connect(id_de_la_socket2,(struct sockaddr*)&envoie_donnee_serveur,sizeof(envoie_donnee_serveur));
        if (erreur!=0)
            printf("\n Desole, je n'ai pas pu ouvrir la session TCP2  serveur: %d %d",erreur,WSAGetLastError());
        else
           printf("\n OUVERTURE DE SESSION TCP2: OK");
        return id_de_la_socket2;
     
     
     
     
    }
     
     
    void fermetureTCP(SOCKET id_de_la_socket)
    {
     
        int erreur;
     
     
        erreur=shutdown(id_de_la_socket,2); // 2 signifie socket d'émission et d'écoute
        if (erreur!=0)
            printf("\n Desole, je ne peux pas fermer la session TCP du a l'erreur : %d %d",erreur,WSAGetLastError());
        else
            printf("\n Session TCP : Arreter \n ");
     
            erreur=shutdown(id_de_la_socket2,2); // 2 signifie socket d'émission et d'écoute
        if (erreur!=0)
            printf("\n Desole, je ne peux pas fermer la session TCP du a l'erreur : %d %d",erreur,WSAGetLastError());
        else
            printf("\n Session TCP 2 : Arreter \n ");
     
        // FERMETURE DE LA SOCKET
        erreur=closesocket(id_de_la_socket);
        if (erreur!=0)
            printf("\n Desole, je ne peux pas arreter la socket machine du a l'erreur : %d %d",erreur,WSAGetLastError());
        else
            printf("\n Socket machin : Arreter \n");
     
     
              // FERMETURE DE LA SOCKET2
        erreur=closesocket(id_de_la_socket2);
        if (erreur!=0)
            printf("\n Desole, je ne peux pas arreter la socket machine du a l'erreur : %d %d",erreur,WSAGetLastError());
        else
            printf("\n Socket serveur : Arreter \n");
     
     
     
        // Fermeture de WSAStartup
     
        erreur=WSACleanup();
        if (erreur!=0)
            printf("\n Desole, je ne peux pas liberer winsock du a l'erreur : %d %d",erreur,WSAGetLastError());
        else
            printf("\n WSACleanup : OK \n");
     
        getchar();
    }
     
     
    void ecritureModbus(unsigned char donnees1, unsigned char donnees2)
    {
        unsigned char trameModbus[12]= {0x6c ,0x1f, 0x00, 0x00, 0x00, 0x06, 0xff, 0x06,0x9c,0x42};
     
     
        trameModbus[10] = donnees1;
        trameModbus[11] = donnees2;
     
        nombre_de_caractere=send(id_de_la_socket,(unsigned char *)trameModbus,12,0);
        if (nombre_de_caractere==SOCKET_ERROR)
            printf("\nDesole, je n'ai pas envoyer les donnees du a l'erreur : %d",WSAGetLastError());
        else
            printf("\nsend trame     : OK");
     
     
             nombre_de_caractere_recu=recv(id_de_la_socket,buffer2,12,0);
        if (nombre_de_caractere_recu==SOCKET_ERROR)
            printf("\n Desole, je n'ai pas recu de donnee de la trame ");
        else
        {
            buffer2[nombre_de_caractere_recu]=0;
            printf("\n Voici les donnees de la trame  : %s",buffer2);
        }
     
            nombre_de_caractere_envoi_serveur=send(id_de_la_socket2,trameModbus,strlen(trameModbus),0);  // partie envois supoervisuer ou mon serveur tcp
            if (nombre_de_caractere_envoi_serveur==SOCKET_ERROR)
                printf("\nDesole, je n'ai pas envoyer les donnees du a l'erreur : %d",WSAGetLastError());
            else
            {
                printf("\n send donnee  Serveur  : OK : %d\n",nombre_de_caractere_envoi_serveur);
            }
     
    while(1)
        {
     
            // ********************************************************
            // Reception des données superviseur 
            // ********************************************************
     
            nombre_caractere_recu_serveur=recv(id_de_la_socket2,buffer1,50,0);
            if (nombre_caractere_recu_serveur==SOCKET_ERROR)
                printf("\n Desole, je n'ai pas recu de donnee ");
            else
            {
                printf("\n recue donnee  : OK : %d\n",nombre_caractere_recu_serveur);
                buffer1[nombre_caractere_recu_serveur]=0; // Permet de fermer le tableau après le contenu des data, car la fonction recv ne le fait pas
                printf("\n Voici les donnees de la part de dams : %s",buffer1);
            }
     
     
        }
     
     
     
    }
     
     
    unsigned char lectureModbus(unsigned char donnees1, unsigned char donnees2 )  //tram modbus capteur
    {
        unsigned char TramModBus_capteur[12]= {0x50, 0xa2, 0x00, 0x00, 0x00, 0x06, 0xff, 0x03, 0xb1, 0x53};
     
        TramModBus_capteur[10] = donnees1;
        TramModBus_capteur[11] = donnees2;
     
     
     
        nombre_de_caractere_Capteur=send(id_de_la_socket,(unsigned char *)TramModBus_capteur,12,0);
        if (nombre_de_caractere_Capteur==SOCKET_ERROR)
            printf("\nDesole, je n'ai pas envoyer les donnees du a l'erreur : %d",WSAGetLastError());
        else
            printf("\nsend trame     : OK");
     
     
     
    }
     
     
     
    int main()
    {
     
        id_de_la_socket=configurationTCP("127.0.0.1");
     
        Sleep(3000);
     
     
        sorties=EXPULSION_VENTOUSE^sorties;
        ecritureModbus((unsigned char)0x00,(unsigned char)EXPULSION_VENTOUSE);
        Sleep(3000);
     
        sorties=BRAS_POSITION_MAGASINA^sorties;
        ecritureModbus((unsigned char)0x00,(unsigned char)BRAS_POSITION_MAGASINA);
     
     
     
     
        fermetureTCP(id_de_la_socket);
     
     
        return 0;
    }

  2. #2
    Membre expert
    Inscrit en
    mars 2005
    Messages
    1 018
    Détails du profil
    Informations forums :
    Inscription : mars 2005
    Messages : 1 018
    Points : 3 003
    Points
    3 003

    Par défaut

    Le return inconditionnel ligne 95 rend le code subséquent inatteignable.

  3. #3
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    avril 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : avril 2017
    Messages : 6
    Points : 4
    Points
    4

    Par défaut Matt_Houston

    Ah ,je doit faire quoi du coup ? :/

  4. #4
    Membre expert
    Inscrit en
    mars 2005
    Messages
    1 018
    Détails du profil
    Informations forums :
    Inscription : mars 2005
    Messages : 1 018
    Points : 3 003
    Points
    3 003

    Par défaut

    Ne pas return..? Ton id_de_la_socket2 n'est jamais initialisé.

  5. #5
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    avril 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : avril 2017
    Messages : 6
    Points : 4
    Points
    4

    Par défaut Matt_Houston

    Franchement je suis nul en réseau je sais vraiment pas comment résoudre ce problem ,pouvez vous me dire ce que je doit faire exactement

  6. #6
    Membre expert
    Inscrit en
    mars 2005
    Messages
    1 018
    Détails du profil
    Informations forums :
    Inscription : mars 2005
    Messages : 1 018
    Points : 3 003
    Points
    3 003

    Par défaut

    Ton problème n'a pas grand chose à voir avec le réseau. À ton avis, qu'affiche le programme suivant ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <stdio.h>
     
    int f() {
        return 0;
        return 1;
    }
     
    int main() {
        printf("%d\n", f());
        return 0;
    }

  7. #7
    Rédacteur/Modérateur

    Homme Profil pro
    Network game programmer
    Inscrit en
    juin 2010
    Messages
    4 404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : juin 2010
    Messages : 4 404
    Points : 17 259
    Points
    17 259

    Par défaut

    Ton problème n'a rien à voir avec un problème réseau, tu ne maîtrises pas les mécanismes de base du langage. C'est un problème d'algorithmique.
    Tu écris des lignes au petit bonheur, probablement en copiant d'un peu partout sur internet, et espère que ça fasse un programme complet.
    Tu as un return dans configurerTCP qui n'a aucun sens. Si tu regardais un peu les warning de compilation, tu dois avoir des "warning unreachable code".
    Tu utilises des variables globales, pourquoi pas pour faire un truc quick&dirty, mais tu les écrases et gères n'importe comment dans toutes les fonctions.
    socket error 10038 signifie que le socket que tu passes en paramètre est invalide. Que son id est inconnu du système. Vue la (non)gestion ni maîtrise des variables, ça ne m'étonne pas.
    C'est un problème d'algo, écris ton programme en pseudo-code dans un premier temps.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

Discussions similaires

  1. [TCP] Client / Serveur derrière un routeur
    Par webpsi dans le forum IO
    Réponses: 6
    Dernier message: 11/06/2014, 11h27
  2. [SOCKET] TCP client/serveur
    Par hxh2008 dans le forum Réseau
    Réponses: 3
    Dernier message: 25/11/2011, 17h01
  3. Fin échange TCP client / serveur
    Par quikjean dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 05/06/2009, 10h07
  4. [TCP] Client/Serveur avec les composants Indy
    Par bakaneko dans le forum C++Builder
    Réponses: 2
    Dernier message: 14/02/2007, 12h47

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