Bonjour j'ai fait un socket client sur c++ builder et un serveur socket sur linux mais j'ai un probleme c'est que j'ai créé un tableau de caractères sur mon serveur que j'envoie à mon Client,cependant j'ai du mal à bien afficher les valeurs envoyées sur mon ihm Client .je veux que ca m'affiche les valeurs définies dans mon tableau.
code Serveur :
main :
/*#ifdef HAVE_CONFIG.H
#include <config.h>
#endif*/
//#include <stdlib.h>
//#include <stdio.h>
//#include <unistd.h>
//using namespace std;
#include "./CSocket.h"
#include "ConvStrInt.h"
using namespace std;
int main()
{ int test,ad,seuil[60];
//int seuili;
char * seuila;
int i=0,j=0,k=0;
char temp[8][3];
//float temperature[8];
char temperature[16]={1234,02,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
cout << "MODULE SERVEUR SOCKET FOX" << endl;
//Instanciation de la classe CSocket
CSocket *socketFox = new CSocket();
//NOMINATION SOCKET
test = socketFox->nommer_socket();
// ATTENTE CONNEXION
test = socketFox->attendre_connexion();
//ACCEPTATION CONNEXION
test=socketFox->accepter_connexion();
cout<<"CLIENT CONNECTÉ : attente caractère "<< endl;
//RECEPTION CHAR
//int i=0;
/* ad=socketFox->recevoir();
seuila=(char *)ad;
cout<< seuila <<endl;
ConvStrInt *Conversion = new ConvStrInt();
while(j<8)
{ while(seuila[i]!='.')
{ temp[j][k]=seuila[i];
i++;
k++;
}
temp[j][k]=0x00;
cout << temp[j] << endl;
Conversion->Conv(temp[j]);
k=0;
j++;
i++;
}
cout << "Fin conversion" << endl;*/
socketFox->envoyer(temperature); //J'envoie mon ta
socketFox->~CSocket();
cout<<"Client déconnecté "<<endl;
return 0;
}
CSocket.h
#ifndef CSOCKET_H_INCLUDED
#define CSOCKET_H_INCLUDED
//#include <stdio.h>
//#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <unistd.h>
#include <iostream.h>
#include <netinet/in.h>
#include "ConvStrInt.h"
//#include <stdlib.h>
const int MAXCONNECTIONS = 5 ;
class CSocket
{ public:
char valeur[60];
char *donnees;
CSocket();
~CSocket();
int nommer_socket();
int attendre_connexion();
int accepter_connexion();
//TRANSMISSION DE DONNEES
int recevoir();
int envoyer(char* );
//CLIENT INITIALISATION
int connexion();
private:
int test,idSockServ,idSockClient;
//sockaddr_un m_addr;
//int server_sockfd, client_sockfd;
int server_len, client_len;
struct sockaddr_in server_address , client_address;
};
#endif // CSOCKET_H_INCLUDED
CSocket.cpp
#include "./CSocket.h"
CSocket::CSocket()
{ cout << "Instanciation de la classe CSocket" << endl;
idSockServ=socket( AF_INET, SOCK_STREAM,0);
if(idSockServ==-1)
{ cout<<"\n Création du socket : IMPOSSIBLE "<<endl;
perror("Erreur Création du socket");
exit(-1);
}
else
cout<<"\n Création du socket : OK " <<"IDENTIFIANT : " << idSockServ << endl;
}
CSocket::~CSocket()
{
cout << "Fermeture socket" << endl;
close(idSockServ);
};
//NOMINATION SOCKET
int CSocket::nommer_socket()
{ int tr=1;
if (setsockopt(idSockServ,SOL_SOCKET,SO_REUSEADDR,&tr,sizeof(int)) == -1)
{
perror("setsockopt");
exit(1);
}
//REMPLISSAGE DES STRUCTURES
server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr=htonl(INADDR_ANY);
server_address.sin_port=htons(9734);
server_len=sizeof(server_address);
test= bind(idSockServ, (struct sockaddr *) &server_address, sizeof (server_address));
if(test==-1)
{ cout << "\n Nomination du socket : IMPOSSIBLE" << endl;
perror("ERREUR DE TYPE");
this->~CSocket();
exit(-1);
}
else
cout << "\n Nomination du socket : OK" << endl;
return(0);
}
//ATTENTE CONNEXION
int CSocket::attendre_connexion()
{ test = listen (idSockServ,5);
if(test==-1)
{ perror("listen KO");
this->~CSocket();
exit(-1);
}
cout << "listen OK" << endl;
return(0);
}
//ACCEPTER CONNEXION
int CSocket::accepter_connexion()
{ int addr_lenght = sizeof(server_address);
idSockClient=accept(idSockServ, (sockaddr *) &client_address, (socklen_t *) &addr_lenght );
if(idSockClient==-1)
{ perror("Acceptation KO");
this->~CSocket();
exit(-1);
}
cout << "Acceptation OK " << client_address.sin_addr.s_addr << endl;
return(idSockClient);
}
//recevoir
int CSocket::recevoir()
{ test=read(idSockClient, valeur, 60);
if(test==-1)
{ perror("Réception KO ");
this->~CSocket();
exit(-1);
}
//printf("Seuil : %s\n",seuil);
//for (int i=0;i<8;i++)
{ cout << "Réception OK " << test << endl;
}
return ((int)valeur);
}
//ENVOYER
int CSocket::envoyer( char* donnees)
{ //cout << "\n message à envoyer :" <<donnees<< endl;
for (int i=0;i<8;i++)
{ cout<< donnees[i] << endl;
test=write(idSockClient,donnees, 8);
if(test==-1)
{ perror("Emission KO ");
this->~CSocket();
exit(-1);
}
donnees++;
}
{
cout << "Envoi OK " << test << endl;
}
return(test);
}
//CONNEXION
int CSocket::connexion()
{ //m_addr.sun_family = AF_INET;
//strcpy(m_addr.sun_path,"socket_serveur");
test = connect(idSockServ, (sockaddr *) &server_address,sizeof (server_address));
if(test==-1)
{ perror("Connexion KO");
this->~CSocket();
exit(-1);
}
cout << "Connexion OK" << endl;
return(0);
}
Coode Client sous C++ Builder:
IHM.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "IHM.h"
#include "Configuration.h"
#include <winbase.h>
#include <windows.h>
#include <IniFiles.hpp>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
ClientSocket1->Open();
//---------Affichage de la date à l'ouverture de la fenêtre------------------------------------------------------------------
Horloge->Caption=DateTimeToStr(Now());
}
//--Quand on clique sur le bouton configurer ,cela affiche la page de configuration -------------------------------------------------------------------
void __fastcall TForm1::Bu_Config_SeuilClick(TObject *Sender)
{
Form2->Visible=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Ed_companyChange(TObject *Sender)
{
Panel1->Caption=Ed_company->Text;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ClientSocket1Connect(TObject *Sender,
TCustomWinSocket *Socket)
{
Ed_Etat->Text="La communication est établie avec la carte FOX";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ClientSocket1Error(TObject *Sender,
TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
ShowMessage("Erreur, Verifier que la carte FOX est à l'écoute du client");
}
//------Reception Tableau envoyé par serveur---------------------------------------------------------------------
void __fastcall TForm1::ClientSocket1Read(TObject *Sender,
TCustomWinSocket *Socket)
{
Edit9->Text=Socket->ReceiveText();
}