Bonjour,
Voila j'aimerais envoyer un packet UDP a diiferentes adresses Réseau
(IP). En utilisant Builder 5 j ai créer ma socket dans une classe liée
a mon IHM prinicpale par un objet. Je veut aussi pouvoir changer l
adresse Ip quand je veut donc j ai fait une fenetre spéciale pour
récupérer la nouvelle adresse qui elle aussi a un objet de ma classe
socket. (l objet des deux fenetre a été défini dans la classe
directement).
Tout marche c cool.... enfin presque....
Mon probleme c'est que mon changement d'adresse influe sur ma classe mais pas sur ma socket...
Que faire???
PS : il existe un thread me permettant uniquement de recevoir des paquet UDP. il possede sa propre socket
/* Code source de l IHM principale
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "IHM.h"
#include "ClassSocket.h"
#include "ThreadRecept.h"
#include "ChgtAdr.h"
#include <string.h>
#include <Winsock2.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TFEthernet *FEthernet;
ThreadR *Thread;
//---------------------------------------------------------------------------
__fastcall TFEthernet::TFEthernet(TComponent* Owner)
: TForm(Owner)
{
Thread = new ThreadR (true);
Thread->Priority = tpNormal;
Socks.Initialisation();
}
//---------------------------------------------------------------------------
void __fastcall TFEthernet::BEnvoiClick(TObject *Sender)
{
char ToSend[9];
memset(ToSend,0,sizeof(ToSend));
strcpy(ToSend,"GetMesure");
sendto(Socks.FPSocket,ToSend,sizeof(ToSend),0,(SOCKADDR*)&Socks.SinFP,sizeof(Socks.SinFP));
Thread->Resume();
}
//---------------------------------------------------------------------------
void __fastcall TFEthernet::EVConsigneChange(TObject *Sender)
{
Thread->Suspend();
}
//---------------------------------------------------------------------------
void __fastcall TFEthernet::AdresseIP1Click(TObject *Sender)
{
FEthernet->Enabled=false;
FAdrIP->Enabled=true;
FAdrIP->Visible=true;
}
//---------------------------------------------------------------------------
*/
/* code de la classe socket
#include <Winsock2.h>
#include <String.h>
#include "IHM.h"
class CSocket
{
public:
int Port;
char IP[15];
WSADATA WsaSocket;
SOCKET FPSocket;
SOCKADDR_IN SinFP;
CSocket (void);
~CSocket (void);
void Initialisation (void);
};
CSocket Socks;
CSocket::CSocket()
{
strcpy(IP,"128.128.1.11");
Port = 2000;
}
CSocket::~CSocket ()
{
closesocket(FPSocket);
WSACleanup();
}
void CSocket::Initialisation (void)
{
WSAStartup(MAKEWORD(2,0),&WsaSocket);
SinFP.sin_family=AF_INET;
SinFP.sin_addr.s_addr=inet_addr(IP);
SinFP.sin_port=htons(Port);
FPSocket=socket(AF_INET,SOCK_DGRAM,0);
bind(FPSocket,(SOCKADDR*)&SinFP,sizeof(SinFP));
}
//-------------------------------------------------------------
*/
/* code de la page de recup d adresse IP
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "ChgtAdr.h"
#include "IHM.h"
#include "ClassSocket.h"
#include <string.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TFAdrIP *FAdrIP;
//---------------------------------------------------------------------------
__fastcall TFAdrIP::TFAdrIP(TComponent* Owner)
: TForm(Owner)
{
EAdrIP->Text="128.128.";
}
//---------------------------------------------------------------------------
void __fastcall TFAdrIP::BValidIPClick(TObject *Sender)
{
Socks.SocketConfigure = true;
strcpy(Socks.IP,EAdrIP->Text.c_str());
Socks.Initialisation();
FEthernet->Enabled=true;
FAdrIP->Visible=false;
FAdrIP->Enabled=false;
}
//---------------------------------------------------------------------------
*/
/*code du thread
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "ThreadRecept.h"
#include "IHM.h"
#include <Winsock2.h>
#pragma package(smart_init)
//---------------------------------------------------------------------------
__fastcall ThreadR::ThreadR(bool CreateSuspended)
: TThread(CreateSuspended)
{
}
//---------------------------------------------------------------------------
void __fastcall ThreadR::Execute()
{
WSADATA WsaThread;
WSAStartup(MAKEWORD(2,0),&WsaThread);
SOCKET SockThread;
SOCKADDR_IN SinThread;
SinThread.sin_family=AF_INET;
SinThread.sin_addr.s_addr=INADDR_ANY;
SinThread.sin_port=htons(2000);
SockThread=socket(AF_INET,SOCK_DGRAM,0);
bind(SockThread,(SOCKADDR*)&SinThread,sizeof(SinThread));
char ChRecue[50];
int sinsize=sizeof(SinThread);
while(!Terminated)
{
memset(ChRecue,0,sizeof(ChRecue));
recvfrom(SockThread,ChRecue,sizeof(ChRecue),0,(SOCKADDR*)&SinThread,&sinsize);
FEthernet->EVConsigne->Text=ChRecue;
strcpy(ChRecue,"");
}
}
//---------------------------------------------------------------------------
Merci de votre aide!!!! Car moi la je comprend plus rien normallement ca devré bien se passer....