Bonjour

Voila En TP dans mon BTS IRIS on a fait un programme Client/Serveur
1 application pour le client et 1 pour le serveur
Moi j'ai envie de faire les deux Serveur et Client sur le même mais je n'arrive pas
j'ai essayer de deux manière mais je n'ai pas réussi

Voila j'aimerais savoir comment on peut faire et si c'est possible je vous expose mon code ou il ne marche pas car l'autre il marche mais sa me mais n'importe koi
car quand on veut prendre des informations ou en envoyer je faisait

Socket->Address mais la il y a les deux donc j'ai mis a la place les composant important mais bon sa ne fonctionne pas
Voila mon codage

Ihm.h
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
 
// Fichier "UntPrinc.h"    Version 3.0     Créé le 11/03/08      par  Vandomme
// Classe associée à UntPrinc
//
//---------------------------------------------------------------------------
 
#ifndef UntPrincH
#define UntPrincH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>
#include <ScktComp.hpp>
//---------------------------------------------------------------------------
class TFPrinc : public TForm
{
__published:	// Composants gérés par l'EDI
        TEdit *EdtMessageRecu;
        TServerSocket *ServerSocket;
        TButton *BtnLancerServeur;
        TButton *BtnFermerServeur;
        TStatusBar *StatusBarServeur;
        TGroupBox *GpBoxClients;
        TEdit *EdtIP;
        TEdit *EdtPort;
        TEdit *EdtNomMachine;
        TEdit *EdtNbClients;
        TLabel *LblNbClients;
        TLabel *LblMessageRecu;
        TLabel *LblIP;
        TLabel *LblPort;
        TLabel *LblNom;
        TLabel *LblMessageAEnvoyer;
        TEdit *EdtMessageAEnvoyer;
        TButton *BtnEcrire;
        TButton *BtnQuitter;
        TLabel *LbllPortDuServeur;
        TEdit *EdtPortDuServeur;
        TClientSocket *ClientSocket;
        void __fastcall BtnLancerServeurClick(TObject *Sender);
        void __fastcall BtnFermerServeurClick(TObject *Sender);
        void __fastcall ServerSocketClientConnect(TObject *Sender,
          TCustomWinSocket *Socket);
        void __fastcall ServerSocketClientDisconnect(TObject *Sender,
          TCustomWinSocket *Socket);
        void __fastcall ServerSocketClientRead(TObject *Sender,
          TCustomWinSocket *Socket);
        void __fastcall EdtMessageAEnvoyerClick(TObject *Sender);
        void __fastcall BtnQuitterClick(TObject *Sender);
        void __fastcall BtnEcrireClick(TObject *Sender);
private:	// Déclarations de l'utilisateur
  int nbClients ;                      //Nombres de clients connecté au serveur
public:		// Déclarations de l'utilisateur
        __fastcall TFPrinc(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TFPrinc *FPrinc;
//---------------------------------------------------------------------------
#endif
// -------------------- Fin du fichier UntPrinc.h ---------------------------

Ihm.cpp
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
 
/*******************************************************************************
 * NOM           : UntPrinc.cpp
 * TYPE          : DEPENDANCE de l'application "PrjServeur.cpp"
 * DESCRIPTION   : Serveur socket
 *
 * AUTEURS       : Vandomme
 * VERSION       : 3.0
 * CREATION      : 12/03/08                   DER. MODIF. : 12/03/08
 *
 * DOSSIER TRAV. : U:\ClientServeur\BuilderDeux\ServeurDeux
 *
 * CONTRAINTES   : EDI BORLAND C++ Builder 6.Langage C++
 *                 Cibles PC sous WINDOWS XP Pro
 *                 Matériel : PC Pentium 4
 *
 *******************************************************************************
 */
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "UntPrinc.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TFPrinc *FPrinc;
//---------------------------------------------------------------------------
__fastcall TFPrinc::TFPrinc(TComponent* Owner)
        : TForm(Owner)
{
  nbClients = 0 ;                     //Par defaut, le nombre de client est à 0
}
//---------------------------------------------------------------------------
 
void __fastcall TFPrinc::BtnLancerServeurClick(TObject *Sender)
{
//Cette fonction permet de démarrer le serveur.
  int port ;
 
  if(EdtPortDuServeur->Text == "") {
    ShowMessage("Entrez un port") ;
    EdtPortDuServeur->SetFocus() ;
  }else{
    port = EdtPortDuServeur->Text.ToInt() ;
    EdtMessageRecu->Clear() ;
    ServerSocket->Port = port ;
    ServerSocket->Open() ;               //On ouvre une socket, ensuite on ecoute
    if(Active == true) {
    //Si le serveur est demarré, on modifie l'IHM.
      BtnFermerServeur->Enabled = true ;
      BtnLancerServeur->Enabled = false ;
      StatusBarServeur->SimpleText = "Aucun Client connecté, serveur en attente" ;
      EdtNbClients->Text = "Aucun Client connecté" ;
      BtnEcrire->Enabled = true ;
    }else {
    //Sinon, modification de la barre de statut
      StatusBarServeur->SimpleText = "Echec Connexion" ;
    }
  }
}
//---------------------------------------------------------------------------
 
void __fastcall TFPrinc::BtnFermerServeurClick(TObject *Sender)
{
  EdtMessageRecu->Clear() ;
  if(ServerSocket->Active == true) {
  //Si la serveur est démarré, on ferme la connexion et on modifie l'IHM.
    ServerSocket->Close() ;
    BtnFermerServeur->Enabled = false ;
    BtnLancerServeur->Enabled = true ;
    BtnEcrire->Enabled = false ;
    StatusBarServeur->SimpleText = "Fermeture du serveur" ;
    StatusBarServeur->SimpleText = "Serveur non démarré" ;
    EdtIP->Clear() ;
    EdtPort->Clear() ;
    EdtNomMachine->Clear() ;
    EdtNbClients->Clear() ;
  }
}
//---------------------------------------------------------------------------
 
void __fastcall TFPrinc::ServerSocketClientConnect(TObject *Sender,
      TCustomWinSocket *Socket)
{
/*Cette fonction est appelée lorsqu'un client se connecte au serveur
  On modifie l'IHM en conséquence.*/
  nbClients ++ ;
  if(nbClients == 1) {
    StatusBarServeur->SimpleText = (AnsiString)nbClients + " Client connecté" ;
    EdtNbClients->Text = (AnsiString)nbClients + " Client connecté" ;
    BtnFermerServeur->Enabled = false ;
    ServerSocket->Socket->SendText("Bienvenue sur le serveur") ;
 
    //Informations du serveur
    GpBoxClients->Visible = true ;
    EdtIP->Text = ServerSocket->Socket->RemoteAddress ;  //Adresse IP du client
    EdtPort->Text = ServerSocket->Socket->RemotePort ; //Port utilisé par le client
    EdtNomMachine->Text = ServerSocket->Socket->RemoteHost ; //Nom de la machine du client
 
    //Connection avec le client
    ClientSocket->Address = ServerSocket->Socket->RemoteAddress ;
    ClientSocket->Port = ServerSocket->Socket->RemotePort ;
    ClientSocket->Open() ;
    LblMessageAEnvoyer->Visible = true ;
    EdtMessageAEnvoyer->Visible = true ;
    BtnEcrire->Visible = true ;
  }
}
//---------------------------------------------------------------------------
 
void __fastcall TFPrinc::ServerSocketClientDisconnect(TObject *Sender,
      TCustomWinSocket *Socket)
{
//La fonction est appelée quand le client se deconnecte du serveur.
  nbClients -- ;
  StatusBarServeur->SimpleText = "Fermeture d'une connexion cliente" ;
  if(nbClients == 0) {
  //Si il n'y a plus de clients connectés
    StatusBarServeur->SimpleText = "Aucun Client connecté, serveur en attente" ;
    EdtNbClients->Text = "Aucun Client connecté" ;
    BtnFermerServeur->Enabled = true ;
    EdtIP->Clear() ;
    EdtPort->Clear() ;
    EdtNomMachine->Clear() ;
    EdtMessageAEnvoyer->Clear() ;
    EdtMessageRecu->Clear() ;
    GpBoxClients->Visible = false ;
  }else{
  //On affiche le nombre de clients connecté grâce au compteur
    StatusBarServeur->SimpleText = (AnsiString)nbClients + " Client connecté" ;
    EdtNbClients->Text = (AnsiString)nbClients + " Client connecté" ;
    EdtIP->Text = ServerSocket->Socket->RemoteAddress ;  //Adresse IP du client
    EdtPort->Text = ServerSocket->Socket->RemotePort ; //Port utilisé par le client
    EdtNomMachine->Text = ServerSocket->Socket->RemoteHost ; //Nom de la machine du client
  }
}
//---------------------------------------------------------------------------
 
void __fastcall TFPrinc::ServerSocketClientRead(TObject *Sender,
      TCustomWinSocket *Socket)
{
/*Cette fonction est applée lorsqu'un client envoi un message au serveur, donc
  le serveur le reçoi et l'affiche puis envoie au client un accusé de réception
 */
//  AnsiString message ;
 
 
  EdtMessageRecu->Text = ServerSocket->Socket->ReceiveText() ; //Réception du message du client
  ServerSocket->Socket->SendText("Message bien reçu") ;
 
  StatusBarServeur->SimpleText = "Réception du message client" ;
 
  EdtIP->Text = ServerSocket->Socket->RemoteAddress ;    //Adresse IP du client
  EdtPort->Text = ServerSocket->Socket->RemotePort ; //Port utilisé par le client
  EdtNomMachine->Text = ServerSocket->Socket->RemoteHost ; //Nom de la machine du client
 
  /*Envoi de l'accusé de réception*/
  StatusBarServeur->SimpleText = "Envoi de l'accusé de réception" ;
}
//---------------------------------------------------------------------------
 
void __fastcall TFPrinc::EdtMessageAEnvoyerClick(TObject *Sender)
{
  EdtMessageAEnvoyer->Clear() ;        
}
//---------------------------------------------------------------------------
 
void __fastcall TFPrinc::BtnQuitterClick(TObject *Sender)
{
  if(nbClients == 0) {
    Close() ;
  }else{
    ServerSocket->Close() ;
    Close() ;
  }
}
//---------------------------------------------------------------------------
 
void __fastcall TFPrinc::BtnEcrireClick(TObject *Sender)
{
/*Cette fonction permet d'envoi un message au serveur si il est connecté et si
  le socket du client est connecté*/
/*  if(ServerSocket->Active == true) {
  //Si connexion active
    ServerSocket->SendText(EdtMessageAEnvoyer->Text) ; //Envoi du message
   // ServerSocket->
    StatusBarServeur->SimpleText = "Message Envoyé" ;
  } */
}
//---------------------------------------------------------------------------

Donc voila

Je vous remercie de votre aidez en avance

Cordialement Arnaud