IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

Problème socket asynchrone


Sujet :

Windows

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2007
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 19
    Points : 16
    Points
    16
    Par défaut Problème socket asynchrone
    Bonjour,

    Je réalise un programme Client pouvant recevoir des messages de 3 serveurs donc pour cela j'utilise les sockets asynchrones avec les méthodes suivantes:

    WSARecv;
    WSAGetOverlappedResult;
    WSAWaitForMultipleEvents;

    J'ai donc réalisé un programme et lors de la compilation aucune erreur
    Cependant lorsque un des serveur m'envoi une information je ne recois rien.

    Voici mon programme:

    Mon .cpp:
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    void ClientRobot::connecter()//creation socket
    {
    // Déclarations variables 
    	WSADATA	wsadata;
    	SOCKADDR_IN		    sin_Adresse_Serveur;
    	SOCKADDR*			pSockAdd;	// Pointeur sur structure SOCKADDR
    	WSAStartup( MAKEWORD( 2, 1), &wsadata );
    	int EtatConnect=0;	// Etat primitive connect
    
    	sock = socket(AF_INET,SOCK_STREAM,0 );// Création de la socket en mémoire
    	if ( sock != INVALID_SOCKET )
    	{
    
    		sin_Adresse_Serveur.sin_family				= AF_INET;	// Domaine
    		sin_Adresse_Serveur.sin_port				= htons(2000);	// Port
    		sin_Adresse_Serveur.sin_addr.S_un.S_addr	= inet_addr("192.168.100.46");	// Adresse IP
    		memset( sin_Adresse_Serveur.sin_zero, 0 , 8 );
    		pSockAdd = (SOCKADDR*)&sin_Adresse_Serveur;
    		EtatConnect = connect( sock,pSockAdd,sizeof(sin_Adresse_Serveur) );
    		if(EtatConnect==0)
    			printf("connecte au Robot\n");
    
    		else
    			printf("non connecte au robot\n");
    
    	}
    	else
    		closesocket( sock );
    }
    
    void ClientRobot::attendreReception(char buffer,WSAEVENT &Evt)
    {
    	printf("attendre reception\n");
    	WSABUF DataBuf;
    	DataBuf.len=1;
    	DataBuf.buf = &buffer ;
    	overl.hEvent=Evt;
    	Flags = 0;
    	RecvBytes = 0;
    	if(WSARecv(sock,&DataBuf,1,&RecvBytes,&Flags,&overl,NULL)==SOCKET_ERROR)
    	{
    		int erreur = WSAGetLastError();
    		if(erreur != WSA_IO_PENDING)
    			printf("erreur occured at WSARecv\n");
    	}
    	else
    	{
    switch(buffer)
    {
    //traitement caractere
    }		
    	}
    }
    
    void ClientRobot::lireReception()
    {
    printf("lire reception \n");
    WSAGetOverlappedResult(sock,&overl,&BytesTransferred,FALSE,&Flags);
    }
    Mon Main:
    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
    23
    void main()
    {
    	char caractere_recu='0';
    	ClientRobot Robot;	
    	Robot.connecter();
    	DWORD Index;
    	WSAEVENT Evt[3];
    	Evt[ROBOT]=WSACreateEvent();		
    
    	do
    	{
    		Robot.attendreReception(caractere_recu,Evt[0]);	
    Index=WSAWaitForMultipleEvents(3,Evt,FALSE,WSA_INFINITE,FALSE);
    		if (Index == WSA_WAIT_FAILED)
    		{
    			printf ("Erreur d'evenement%d\n", WSAGetLastError());
    		}
    		Robot.lireReception();
    		WSAResetEvent(Evt);
    	}
    	while(true);
    
    }
    Savez vous d'où vient mon erreur?

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Généralement, quand on utilise WSAWaitForMultipleEvents(), on doit régler quelque chose d'abord avec WSAEventSelect()...

    Mais je n'en sais pas trop, je suis plutôt du genre à utiliser une application fenêtrée avec WSAAsyncSelect()...

Discussions similaires

  1. Problème de sockets asynchrones
    Par Phago dans le forum Réseau
    Réponses: 4
    Dernier message: 19/08/2013, 13h48
  2. Socket Asynchrone - Problème lors de surcharge
    Par NeoKript dans le forum Réseau
    Réponses: 0
    Dernier message: 05/11/2011, 17h03
  3. Problème socket asynchrones
    Par pictom41 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 27/07/2009, 14h50
  4. [MFC] Problème Socket + Connexion SQL
    Par BananaUltra3C dans le forum MFC
    Réponses: 6
    Dernier message: 20/05/2005, 16h41
  5. [Réseau] Problème socket
    Par neenee dans le forum Entrée/Sortie
    Réponses: 14
    Dernier message: 18/01/2005, 15h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo