Voila j'ai créer un CGI qui permet de communiquer avec un serveur TCP
(but du CGI: permettre d'envoyer les données à partir de formulaires vers le serveur TCP, qui les traitent)

-La connexion avec le serveur TCP fonctionne (réception de la réponse du serveur TCP)
-L 'envoi de l'authentification (login + pass) fonctionne(réception de la réponse du serveur TCP)

Cependant, à la fin du script CGI la connexion client-serveur s'interrompt (erreur 10053),je voudrais rester connecter avec le serveur après avoir exécuter l'authentification auprès du serveur TCP

mon code permettant de se connecter au serveur TCP
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
#include <stdlib.h>
#include "CGI.h"
#include "Structure.h"
#include "tProtocole.h"
#define IP  "127.0.0.1"
#define PORT  5000
#define TAILLE_MAX 256
 
//fonction d'affichage des erreurs
void Erreur(char *msg)
{
    perror(msg);
    printf("Erreur :%s", msg);
    exit(0);
}
 
int main(int argc, char* argv[])
{
 
  CCGI cgi;
  CCGIItem item;
  tProtocole protocole;
  char buffer[TAILLE_MAX];
  char * Login ;
  char * Pass;
  int nLongeur;
  int pLongeur;
  char TrameAEnvoyer[50];
 
///////////////////////////////////////////////////////
////////// entête de la page HTML générée//////////////
///////////////////////////////////////////////////////
 
  cout << "Content-type: text/html" << endl <<endl
   << "<html>" << endl
   << "<body>" << endl;
 
   cgi.Load();   //chargement du CGI
 
///////////////////////////////////////////////////////
///////////////////Connection//////////////////////////
///////////////////////////////////////////////////////
    int n,Res ;
    WSADATA WSAData ;
    WSAStartup (MAKEWORD(2,0), &WSAData);
    SOCKET MaSocket ;
    MaSocket= socket(AF_INET, SOCK_STREAM, 0 ) ;
 
        if (MaSocket < 0)
        Erreur("Erreur de creation de socket");
 
        struct hostent* serveur ;
        serveur = gethostbyname (IP) ;
 
        if (serveur == NULL)
        {
                printf("connexion avec le serveur impossible<BR>");
                closesocket (MaSocket);
        }
        struct sockaddr_in StructureAdresseServeur ;
        StructureAdresseServeur.sin_family = AF_INET ;
        StructureAdresseServeur.sin_port = htons(PORT) ;
        StructureAdresseServeur.sin_addr=*(struct in_addr*)serveur->h_addr ;
 
        //Connection au serveur
        Res=connect(MaSocket,(struct sockaddr*)&StructureAdresseServeur, sizeof(StructureAdresseServeur)) ;
 
        if (Res<0)
           Erreur("Erreur de Connection");
 
        n = recv(MaSocket,buffer,strlen(buffer),0);
 
        if(n< 0)
           Erreur("Erreur de réception des données");
 
///////////////////////////////////////////////////////
////////////Réception de la réponse du serveur/////////
///////////////////////////////////////////////////////
 
    printf("//////////////////////////////AFFICHAGE TEST/////////////////////<br/>");
 
    if(buffer[0]=='C')  //le serveur envoi 'C'  
     printf("<a href='Index_2.html' target='_blank'>Menu Principale</a><br/>");
    else
     printf("AUCUNE REPONSE !<BR>");
 
 
///////////////////////////////////////////////////////
 
//////////////////////////////////////////////////////////
//////////////////Authentification////////////////////////
//////////////////////////////////////////////////////////
//permet de récupérer le Login rentré dans le formulaire//
//////////////////////////////////////////////////////////
 
cgi.GetItem(0,&item);
 
nLongeur = item.GetLength();
Login = (char*) malloc(nLongeur);
item.GetValue(Login,nLongeur);
 
cout << Login <<"<BR/>"<< endl;
 
/////////////////////////////////////////////////////////
//permet de récupérer le Pass rentré dans le formulaire//
/////////////////////////////////////////////////////////
 
cgi.GetItem(1,&item);
 
pLongeur = item.GetLength();
Pass = (char*) malloc(pLongeur);
item.GetValue(Pass,pLongeur);
 
cout << Pass <<"<BR/>"<< endl;
 
/////////////////////////////////////////////////////////
/////////////////// Affichage de test////////////////////
 
  printf("//////////////////////////////DONNEES CGI//////////////////////////<br/>");
  protocole.Authentifier(Login,Pass,TrameAEnvoyer);
  printf("TRAME :%s <br />",TrameAEnvoyer);
  send(MaSocket,TrameAEnvoyer,strlen(TrameAEnvoyer),0); //envoyer le login et le passe au serveur
 
  recv(MaSocket,buffer,strlen(buffer),0);               //réception de la réponse du serveur
 
  if(buffer[0]=='1')                                    //test la réponse du serveur
  printf("Réception du message provenant du serveur : %s<br/>",buffer) ;
  else
  printf("Mot de passe incorrect ! <br /><a href='../index.html' >Retour</a>>>Redirection dans 5 secondes !<meta http-equiv='refresh' content='5;url=../index.html'><br/>");
  printf("///////////////////////////FIN AFFICHAGE TEST/////////////////////<br/>");
 
 
///////////////////////////////////////////////////////
////////////Fin de la page HTML générée////////////////
///////////////////////////////////////////////////////
 
  cout << "</ul>" << endl
  << "</body>" << endl
  << "</html>" << endl;
 
///////////////////////////////////////////////////////
//////////////////////DECONNECTION/////////////////////
///////////////////////////////////////////////////////
  //closesocket(MaSocket) ;
 //WSACleanup () ;
}