Donnez votre avis

Programmer des socket en c++ builder client/server socket

Posez votre question
Ce tutoriel vous présente comment on gère les sockets sur C++ Builder

Client/Serveur avec TClientSocket et TServerSocket
Comment Gère les événements OnClientRead
Et la méthode pour l'envoi de texte


Bonne lecture et bonne prog'



Introduction


Alors voila mon tutoriel à le but de vous montrer comment gérer les sockets client/Server sur C++ Builder :

Application Serveur

  • Démarrer votre C++ Builder (Moi j'ai la version 2007)
  • Créer un nouveau projet « Serveur »


Dans la palette de composants ajouter ceux-ci:
  • TEdit
  • TButton, en spédifiant le titre (Caption) : "Fermer"
  • TServerSocket


DoubleCliquer sur la fenêtre

void __fastcall TForm1::FormCreate(TObject *Sender) 
{ 
  ServerSocket1->Port = 23; 
  ServerSocket1->Active = True; 
} 
//-- 


Sur les évênements de l'onglet Objet Inspecteur, double cliquer sur le cas de OnClose et mettez ce code :

//--------------------------------------------------------------------------- 
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) 
{
  ServerSocket1->Active = False;
}
//------


Sur la Fiche (Form1) cliquez sur le contrôle ServerSocket1
Sur les évênements de l'onglet Objet inspecteur, double cliquer sur le cas de OnClientRead et mettez ce code :

void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender, TCustomWinSocket *Socket) 
{ 
  Edit1->Clear(); 
  Edit1->Text = Socket->ReceiveText(); 
}
//-


Enregistrer le projet.

Application Client


Maintenant le Client.

Créer un nouveau projet « Client »
Ajouter un TButton avec le titre (caption) "Send "(envoyer)
Ajouter un ClientSocket
Et TEdit

Double cliquer sur la fenêtre et ajouter ce code :

void __fastcall TForm1::FormCreate(TObject *Sender) 
{ 
  ClientSocket1->Port = 23; 
  ClientSocket1->Host = " Address IP ICI "; 
  ClientSocket1->Active = True; 
} 
//- 


Et Dans le OnClose ajoutez ce code :

//--------------------------------------------------------------------------- 
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) 
{
  ClientSocket1->Active = False;
}
//-


Sur la fiche, cliquer deux fois sur le button « Send » et ajoutez ce code :

void __fastcall TForm1::Button1Click(TObject *Sender) 
{ 
  if( ClientSocket1->Active ) 
    ClientSocket1->Socket->SendText(Edit1->Text); 
}
//-


Enregistrer le projet et exécuter le.

Spécificité version 2009


Pour les versions 2009, on utilise SendBuf et ReceiveBuf pour envoyer des messages

CLIENT
Void sendMSg(char * msg)
{
  int len = strlen(msg);
  ClientSocket->Socket->SendBuf(msg,len);
}


Evênements OnRead :

void __fastcall C_ClientSocket::OnRead(TObject *Sender,TCustomWinSocket *Socket)
{
  AnsiString Data;
  Data.SetLength(Socket->ReceiveLength());
  Socket->ReceiveBuf(Data.c_str(),Socket->ReceiveLength());
  ShowMessage(Socket->RemoteHost+": "+Data);
}



Maintenant on passe au serveur.

SEND
Int Send(char *MSG)
{
  int Len = strlen(MSG);
  ServerSocket1->Socket->Connections[0]->SendBuf(MSG,Len); 
}


Evènements OnClientRead :
void __fastcall C_ServerSocket::OnRead(TObject *Sender,TCustomWinSocket*Socket)
{
  AnsiString Data;
  Data.SetLength(Socket->ReceiveLength());
  Socket->ReceiveBuf(Data.c_str(),Socket->ReceiveLength());
  ShowMessage (Socket->RemoteHost+": "+Data);
}


Voila, c'est la fin du tuto
Amusez vous bien !
Ajouter un commentaire

Commentaires

Commenter la réponse de cs_xmustapha