salut,
mon probleme est le suivant :
je veut faire un tunnel vpn entre deux pc (client et serveur) en programmation en language c sous windows;
je dispose au depart de deux cartes reseaux virtuels une est installé coté client et l'autre coté serveur
les deux sont nommées "TAP01" les instructions à réaliser est les suivantes:
1- ouvrir une socket de connexion entre le client et le serveur en mode connecté
2-coté client:
2.1-lire les données du TAP01 (ReadFile)
2.2-envoyer ces données via la socket vers le serveur (send)
2.3-recevoir les données venant du serveur via sa socket (recv)
2.4-ecrire les données reçus sur le TAP01 (WriteFile)
tous ces instructions sont dans un boucle while

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
while (1) {
 
 //*************************lecture*************************
    if(ReadFile(hTap, Buf, sizeof(Buf), &dwLen, &ovl))
		 {	
	//**************** send ***************************
		 nombre_de_caractere=send(id_de_la_socket,Buf,dwLen,0);
		 }
 
// Reception des données
      // ********************************************************
     nombre_de_caractere=recv(id_de_la_socket,Buf,sizeof(Buf),0);
 
		if (nombre_de_caractere==SOCKET_ERROR)
            printf("\nDesole, je n'ai pas recu de donnee");
        else			
				{	 
		//*****************************ecriture*************************************
				WriteFile(hTap, Buf,nombre_de_caractere, &dwLen, &ovl) 
				}
 
}//fin while
3-coté serveur:
3.1-recevoir les données venant du client via sa socket (recv)
3.2-ecrire les données reçus sur son TAP01 (WriteFile)
3.3lire les données du son TAP01 (ReadFile)
3.4-envoyer les données lus via sa socket vers le client (send)
de meme ces instructions sont dans un boucle while

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
while (1) {
 
// Reception des données
      // ********************************************************
     nombre_de_caractere=recv(id_de_la_socket,Buf,sizeof(Buf),0);
 
		if (nombre_de_caractere==SOCKET_ERROR)
            printf("\nDesole, je n'ai pas recu de donnee");
        else			
				{	 
		//*****************************ecriture*************************************
				WriteFile(hTap, Buf,nombre_de_caractere, &dwLen, &ovl) 
				}
 //*************************lecture*************************
    if(ReadFile(hTap, Buf, sizeof(Buf), &dwLen, &ovl))
		 {	
	//**************** send ***************************
		 nombre_de_caractere=send(id_de_la_socket,Buf,dwLen,0);
		 }
 
 
}//fin while
tous marche bien sans erreur lors du test le ping du client vers le serveur marche bien
mais dans l'autre sens (serveur vers client)ne marche pas sauf lorsque je ping coté client et simultanement coté serveur.
j'arrive à constater que le probleme est que le recv du serveur est bloqué.
j'ai essayé avec les socket non bloquante mais cela ne resoud pas le probleme (probleme de synchronization)
je n'arrive pas à resoudre ce probleme qui m'ennuie
je serais heureuse si quelqu'un peut m'aider