السلام عليكم
عملت برنامج يقوم بإرسال حسابات بين سرفور و خادم لكن حسابات فىListClient تكونServerSocket1ClientRead صحيحة وعندما استعملها فىButton3Click حسابات خارج تكون 0
//serveur//------------------------------------------------------
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#define D_max 100 // Dimension maximale de l'espace de recherche
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------
struct position {int taille;double x[D_max]; double f;}; // Position d'une particule et sa performance
struct vecteur {int taille;double v[D_max];}; // Vitesse d'une particule
// Sous-programmes//
double alea(double a,double b); // Nombre pseudo-aléatoire entre a et b
//double ma_fonction (struct position x); // Fonctions à minimiser
// Variables globales//
int nb_eval; // Nombre total d'évaluation
struct Client{String Adresse;String Port;String x;String f;};
//Client ListClient[20];
//---------------------------------------------------------------------------
int Nclients;
int liste[20];
struct position pp[1];
struct Client ListClient[20];
struct position P[D_max]; // Positions
struct position P_m[D_max]; // Meilleures positions trouvées
struct position meilleure; // Toute meilleure position trouvée
//----------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ServerSocket1->Port=StrToInt(Edit1->Text);
ServerSocket1->Open();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
ServerSocket1->Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
TCustomWinSocket *Socket)
{
int i,n;
n=0;
for(i=0;i<Nclients;i++)
if((ListClient.Adresse==Socket->RemoteAddress )&&
(ListClient.Port==Socket->RemotePort))
n=i;
//pp[0]=P[n];
Socket->ReceiveBuf(pp,sizeof(pp));
ListClient[n].f=pp[0].f;
P[n]=pp[0];
// Form1->Caption=P[n].f;
/* Label12->Caption=P[1].f ;
Label13->Caption=P[2].f ;
Label15->Caption=P[0].f ; */
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ServerSocket1Accept(TObject *Sender,
TCustomWinSocket *Socket)
{
Memo1->Lines->Add("----------------------------------------");
Memo1->Lines->Add("Connécté à "+Socket->RemoteAddress);
Memo1->Lines->Add(Socket->RemotePort);
ListBox1->Items->Add(Socket->RemotePort);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ServerSocket1ClientConnect(TObject *Sender,
TCustomWinSocket *Socket)
{
Memo1->Lines->Add("Connexion acceptée par le socket serveur");
//Memo1->Lines->Add("Déconnécté");
StatusBar1->Panels->Items[2]->Text=" Nombre des Clients connectés "+IntToStr(Nclients+1);
ListClient[Nclients].Adresse=Socket->RemoteAddress;
ListClient[Nclients].Port=Socket->RemotePort;
Nclients=Nclients+1;
}
//-----------------------------------------------------------------------------
void __fastcall TForm1::ServerSocket1ClientDisconnect(TObject *Sender,
TCustomWinSocket *Socket)
{
Memo1->Lines->Add("Déconnecté");
int i,n;
n=0;
for(i=0;i<Nclients;i++)
if((ListClient.Adresse==Socket->RemoteAddress )&&
(ListClient.Port==Socket->RemotePort))
n=i;
Nclients=Nclients-1;
for(i=n;i<Nclients;i++)
ListClient=ListClient[i+1];
ListBox1->Items->Delete(n);
StatusBar1->Panels->Items[2]->Text=" Nombre des Clients connectés "+IntToStr(Nclients);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ServerSocket1Listen(TObject *Sender,
TCustomWinSocket *Socket)
{
Memo1->Lines->Add("A l''écoute...");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ServerSocket1ClientError(TObject *Sender,
TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
if (ErrorEvent==eeGeneral)
Memo1->Lines->Add("Erreur inattendu");
if (ErrorEvent==eeSend)
Memo1->Lines->Add("Erreur d''écriture sur la connexion socket");
if (ErrorEvent==eeReceive)
Memo1->Lines->Add("Erreur de lecture sur la connexion socket");
if (ErrorEvent==eeConnect)
Memo1->Lines->Add("Une demande de connexion déjà acceptée n''a pas pu être achevée");
if (ErrorEvent==eeDisconnect)
Memo1->Lines->Add("Erreur de fermeture d''une connexion");
if (ErrorEvent==eeAccept)
Memo1->Lines->Add("Erreur d''acceptation d''une demande de connexion cliente");
}
//----------------------PSO-----------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
//---------------------------------------------------------------------------
//================PROGRAMME PRINCIPAL=====================//
double c1,cmax; // Coefficients de confiance
int D; // Dimension de l'espace de recherche
int d; // Numéro de la dimension courante
double eps; // Précision souhaitée
int eval_max; // Nombre max d'évaluations de la fonction
// double fmin; // Objectif à atteindre
int g; // Numéro de la meilleure informatrice
// struct position pp[1];
double min_f;
int N; // Taille de l'essaim
int n; // Numéro de la particule courante
int rang;
int signe;
struct vecteur V[D_max]; // Vitesses
double xmin,xmax; // Intervalle pour l'espace de recherche
int dis[20];
int dis_pso[20];
int j,i;//
int m,p,bat,vat,s,ss,l,lompe;
//***********************************Paramètres de réglage/******************//
N=StrToIntDef(Edit3->Text,20); // Taille de l’essaim (comme un test d’arrêt)
c1=StrToIntDef(Edit4->Text,0.738); // Confiance en la tendance actuelle
cmax=StrToIntDef(Edit5->Text,1.51); // Confiance maximale en les informatrices
// Problème à traiter//
xmin=StrToIntDef(Edit6->Text,0); xmax=StrToIntDef(Edit7->Text,2.7); // Intervalle pour l'espace de recherche
D=StrToIntDef(Edit8->Text,1); // Espace de recherche
eps=0.00001; // Précision souhaitée
//fmin=0; // Valeur minimale à atteindre, à la précisione
eval_max=20005; // Nombre maximum d'évaluations (comme un test d'arret
p=0;
s=0;
ss=0;
lompe=1;
// l=0;
//---------------------------------------------------------------------------//
// Initialisations des positions et vitesses//
init:
for (n=0;n<N;n++)
{
P[n].taille=D;
for (d=0;d<D;d++)
P[n].x[d]=alea(xmin,xmax);
V[n].taille=D;
for (d=0;d<D;d++)
V[n].v[d]=alea ((xmin-xmax)/2, (xmax-xmin)/2) ;
pp[0]=P[n];
ServerSocket1->Socket->Connections[n]->SendBuf(pp,sizeof(pp));
}
//--------------------------------------------------------------------------//
for(n=0;n<N;n++)
{ ListClient[n].f=-100;
}
if(ListClient[n].f!=-100)
Form1->Caption="fffffffffffffffff";
{Label12->Caption=P[1].f ;
Label13->Caption=P[2].f ;
Label15->Caption=P[3].f ;}
} //====================== ALEA==================//
double alea(double a,double b)
{
// Délivre un nombre pseudo-aléatoire entre a et b selon une distribution simulant l'uniforme//
double r;
// Normalement, RAND_MAX = 32767 = 2^15-1
r=(double)rand()/RAND_MAX; // r dans [0..1]
r=a+r*(b-a);
return r;
}
//-----------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
int i;
Memo2->Lines->Add("Serveur>"+ Memo3->Text);
if (ServerSocket1->Socket->ActiveConnections>0)
{
Form1->Caption="1";
for(i=0;i<=ServerSocket1->Socket->ActiveConnections-1;i++)
{
Form1->Caption="2";
ServerSocket1->Socket->Connections->SendText(88);
//ServerSocket1->Socket->Connections->SendBuf(Memo2->Text);
}}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ListBox1Click(TObject *Sender)
{
int i;
Memo2->Lines->Add("Serveur>"+ Memo3->Text);
if (ServerSocket1->Socket->ActiveConnections>0)
{
//Form1->Caption="1";
//Form1->Caption="2";
ServerSocket1->Socket->Connections[ListBox1->ItemIndex]->SendText(ListClient[ListBox1->ItemIndex].x);
//ServerSocket1->Socket->Connections->SendBuf(Memo2->Text);
//ListBox1->Panels->Items[2]->Text=" Nombre des Clients connectés "+IntToStr(Nclients+1);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
StatusBar1->Panels->Items[0]->Text=TimeToStr(Now());
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormActivate(TObject *Sender)
{
StatusBar1->Panels->Items[1]->Text=FormatDateTime("dddddd",Date());
}
//---------------------------------------------------------------------------// Client//
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "client.h"
#define D_max 100 // Dimension maximale de l'espace de recherche
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
struct position {int taille;double x[D_max]; double f;}; // Position d'une particule et sa performance
struct vecteur {int taille;double v[D_max];}; // Vitesse d'une particule
double ma_fonction (struct position x); // Fonctions à minimiser
struct position P[D_max]; // Positions
struct vecteur V[D_max]; // Vitesses
// struct position x;
struct position pp[1];
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ClientSocket1->Port=StrToInt(Edit1->Text);
ClientSocket1->Host = Edit2->Text;
ClientSocket1->Open();
}
//-------------------------------------------------------------------------
void __fastcall TForm1::ClientSocket1Connect(TObject *Sender,
TCustomWinSocket *Socket)
{
Memo1->Lines->Add("Connectézzzzz à "+Socket->RemoteHost);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
ClientSocket1->Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
Memo3->Lines->Add("Client>"+ Memo2->Text);
Memo2->Clear();
ClientSocket1->Socket->SendText(Memo3->Text);
Memo1->Lines->Add("Informations envoyées au serveur");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ClientSocket1Connecting(TObject *Sender,
TCustomWinSocket *Socket)
{
Memo1->Lines->Add("Serveur a été trouvé");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ClientSocket1Disconnect(TObject *Sender,
TCustomWinSocket *Socket)
{
Memo1->Lines->Add("Déconnecté");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ClientSocket1Error(TObject *Sender,
TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
if (ErrorEvent==eeGeneral)
Memo1->Lines->Add("Erreur inattendu");
if (ErrorEvent==eeSend)
Memo1->Lines->Add("Erreur d''écriture sur la connexion socket");
if (ErrorEvent==eeReceive)
Memo1->Lines->Add("Erreur de lecture sur la connexion socket");
if (ErrorEvent==eeConnect)
Memo1->Lines->Add("Une demande de connexion déjà acceptée n''a pas pu être achevée");
if (ErrorEvent==eeDisconnect)
Memo1->Lines->Add("Erreur de fermeture d''une connexion");
if (ErrorEvent==eeAccept)
Memo1->Lines->Add("Erreur d''acceptation d''une demande de connexion cliente");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ClientSocket1Read(TObject *Sender,
TCustomWinSocket *Socket)
{
int n;
n=0;
//int liste[20];
//struct position x;
int f;
String d;
Socket->ReceiveBuf(pp,sizeof(pp));
Memo2->Text=pp[0].x[1];
pp[0].f=ma_fonction(pp[0]);
n++;
Memo2->Text=pp[0].f;
ClientSocket1->Socket->SendBuf(pp,sizeof(pp));
//C=Socket->ReceiveBuf();
}
//---------------------------------------------------------------------------
double ma_fonction(struct position x)
{
// Evalue la valeur de la fonction à minimiser à la position x//
// AJOUTEZ VOTRE PROPRE FONCTION//
int D,d,nb_eval;
double f,p,xd;
nb_eval=nb_eval+1;
D=x.taille;
//fonction de cour//
//F(x) = x3- 9 * x2+24 * x – 12//
f=0;
for(d=0;d<D;d++)
{
f=f+(x.x[d]*x.x[d]*x.x[d]-9*x.x[d]*x.x[d]+24*x.x[d]-12);
}
return f;
}
