J'ai un probleme avec la fonction recvfrom()
J'ai une application une en C# et dll en C++ qui communique en UDP.
Les deux programme peuvent envoyer des requêtes a l'autre.
Du coté serveur en C++ l'application fonctionne corectement donc coté client C# pas de souci.
Pas contre lorsque que j'envoie une requête a partie de la dll elle s'envoi correctement je la recois bien dans mon application C#, celle ci renvoi un accuser et mon application bug sur la fonction recvfrom().Je vous met mon code:
int n;
char buffer[1007];
struct hostent *hostinfo = NULL;
SOCKADDR_IN Info_destination = { 0 };
const char *hostname = "127.0.0.1"; //IP du serveur
int tosize = sizeof Info_destination;
hostinfo = gethostbyname(hostname);
if (hostinfo == NULL)
{
Debug.Log(1,"Probléme hostinfo");
exit(EXIT_FAILURE);
}
Info_destination.sin_addr = *(IN_ADDR *) hostinfo->h_addr; //IN_ADDR->Ecoute sur toutes les IP locales
Info_destination.sin_port = htons(8444);
Info_destination.sin_family = AF_INET;
MESSAGE_IHMPIPE_CMD message_DllIHM;
message_DllIHM.action = DLLIHM_ACT_D_NEWCONNECT;
message_DllIHM.ID_IHM = 0xA4;
message_DllIHM.STXIHM = 0xBE;
message_DllIHM.Arg[0] = DLLIHM_ACT_D_NEWCONNECT;
message_DllIHM.Arg[1] = ';';
message_DllIHM.Arg[2] = 0x09;
message_DllIHM.NbOctetArg =3;
message_DllIHM.BCC = BCC_Pipe((unsigned char*)&message_DllIHM,4+1+message_DllIHM.NbOctetArg);
Debug.Log(0,"Debut Envoi Trame");
if(sendto(sock_client,(const char*) &message_DllIHM, sizeof(message_DllIHM), 0, (SOCKADDR *)&Info_destination, tosize) < 0)
{
Debug.Log(1,"Erreur sendto");
}
Debug.Log(0,"Debut Attente Trame");
bool flag = true;
while(flag)
{
Debug.Log(0,"While");//Permet de tester
n = recvfrom(sock_client, buffer, sizeof buffer - 1, 0, (SOCKADDR *)&Info_destination, &tosize);
Debug.Log(0,"n %d",n);
Debug.Log(2,"recvfrom = %d",WSAGetLastError());
if (n == SOCKET_ERROR)
{
Debug.Log(2,"Get_Trame: SOCKET_ERROR");
flag = false;
//return false;
}
if (n == 0)flag = true;
if (n>0)
{
flag = false;
buffer[n] = '\0';
Debug.Log(0,"*************Debut Trame reponse IHM***************");
Debug.Log(0,"buffer[0] = %d",buffer[0]);
Debug.Log(0,"buffer[1] = %d",buffer[1]);
Debug.Log(0,"buffer[2] = %d",buffer[2]);
Debug.Log(0,"buffer[3] = %d",buffer[3]);
Debug.Log(0,"buffer[4] = %d",buffer[4]);
Debug.Log(0,"buffer[5] = %d",buffer[5]);
Debug.Log(0,"buffer[6] = %d",buffer[6]);
Debug.Log(0,"buffer[7] = %d",buffer[7]);
Debug.Log(0,"buffer[8] = %d",buffer[8]);
Debug.Log(0,"buffer[9] = %d",buffer[9]);
Debug.Log(0,"*************Fin Trame reponse IHM***************");
}
}
une fois que mon code arrive a la fonction recvfrom elle ne passe pas a l'instruction suivante.(dans mon fichier DEBUG je trouve le premier While puis plus rien. Je suis sur que cela ne vient pas de mon fichier DEBUG car quand je quitte la dll je retrouve bien a la suite les commande de fermeture.
Je ne vois pas du tout d'où cela peut venir :(
Si quelle qu'un a une idée je suis ouvert.
Si vous avez besoin de plus d'informations dit le moi !