Toujours besoin d'aide sur socket avec 2 cartes reseau
Jeff_Trek
Messages postés30Date d'inscriptionjeudi 13 octobre 2005StatutMembreDernière intervention 7 juillet 2006
-
10 nov. 2005 à 14:07
DeAtHCrAsH
Messages postés2670Date d'inscriptionvendredi 25 janvier 2002StatutMembreDernière intervention 6 février 2013
-
10 nov. 2005 à 14:42
Bonjour,
Je reçois des trames grace à ma socket cliente (qui doit être liée à une carte reseau), et renvoyer ces trames via une socket serveur (qui doit être liée à une autre carte reseau).
Voici mon code Source Client qui possede l'adresse IP d'un serveur :
/**********************************
THREAD POUR LA LECTURE DES TRAMES
***********************************/
//DWORD _stdcall Fthread(void*rien)
void FthreadClientAnglais(void *)
{
int continuer = TRUE;
int len;
char message[255];
int Nb_Caracteres_Recus;
char Message_Recu[255];
char szErr[255];
int intCheksum;
char strCheksum[1];
//SOCKET Desc_Socket_Cliente;
int Desc_Socket_Cliente;
SOCKADDR_IN Adresse_Socket_Serveur;
//WORD wVersionRequested;
WSADATA wsaData;
struct hostent *hostentptr;
//wVersionRequested=MAKEWORD(1,1);
strcpy(szErr,"Lancement de WSAStartup !\r\n");
printf("%s",szErr);
//WSAStartup(wVersionRequested,&wsaData);
//Init Winsock
if (WSAStartup(MAKEWORD(1,1),&wsaData)!=0)
{
printf("Impossible d'initialiser Winsok.\n\n");
}
else
{
printf("Winsock initialisé avec succès.\n\n");
}
strcpy(szErr,"Definition de la socket !\r\n");
printf("%s",szErr);
//getch();
Desc_Socket_Cliente=socket(AF_INET,SOCK_STREAM,0);
if (Desc_Socket_Cliente==INVALID_SOCKET)
printf("Erreur lors de la création de la socket : erreur %d.\n\n",WSAGetLastError());
else printf("Socket créée avec succès.\n\n");
strcpy(szErr,"Definition de la socket Terminée !\r\n");
printf("%s",szErr);
intCheksum=fonctionCalculCsum(len,message);
_itoa(intCheksum,strCheksum,10);
//strCheksum[1]=0;
//Attribution de la Cheksum à la fin du message
strcat(message,strCheksum);
//len=strlen(message);
// <- Pour tests
//Mettre une variable globale pour 'Message_Emis' ==> Message_Francais_A_Emettre
if (Message_Francais_A_Emettre!=NULL)
{
//Message_Emis="$VHFDF,C,01DF51DC,FBE00B2E,156800,1800,2*40";
printf("trame envoyee = %s\n",Message_Francais_A_Emettre);
//size_t intTailleMessage = sizeof(Message_Emis);
intTailleMessage = strlen(Message_Francais_A_Emettre);
send(Desc_Socket_Locale,Message_Francais_A_Emettre,intTailleMessage ,0);
_itoa(intTailleMessage ,strTaille,10);
//MessageBox(NULL,strTaille,"Taille de la trame",0);
Message_Francais_A_Emettre=NULL;
Sleep(5000);
//getch();
// GT Mis a vrai en temporaire ->
}
//fin=TRUE;
// <- GT Mis a vrai en temporaire
}
closesocket(Desc_Socket_Locale);
}
/*************************************************/
BOOL DemarreServeurFrancais(void)
/*************************************************/
{
int Code_Retour;
SOCKET Desc_Socket_Connection;
SOCKADDR_IN Adresse_Socket_Connection;
WORD wVersionRequested;
WSADATA wsaData;
*pt_Nouveau_Socket_Serveur=accept
(
Desc_Socket_Connection,
(struct sockaddr*)&Adresse_Socket_Cliente,
&Longueur_Adresse
);
printf("connection accepte depuis le port client %d\n",
ntohs(Adresse_Socket_Cliente.sin_port));
hthread=CreateThread
(
NULL,
0,
(LPTHREAD_START_ROUTINE)Fonction_Thread_Serveur,
(LPVOID)*pt_Nouveau_Socket_Serveur,
0,
&threadID
);
}
//}while(TRUE);
return (0);
}
Comment puis-je associer mon client à une carte reseau et mon serveur à une autre carte reseau du même PC. (Je connais les 2 Adresses IP et les 2 ports TCP)
En esperant être assez clair.
Merci
Jeff.
A voir également:
Toujours besoin d'aide sur socket avec 2 cartes reseau
DeAtHCrAsH
Messages postés2670Date d'inscriptionvendredi 25 janvier 2002StatutMembreDernière intervention 6 février 2013 10 nov. 2005 à 14:42
Regarde dans mes codes sources tu y trouveras un exemple d'application client/serveur. J'y utilise des sockets asynchrones, ce qui pourra meme te permettre de te passer de tes threads.