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

MFC Discussion :

[MFC] Problème de com TCP entre appli PC et appli Pocket PC


Sujet :

MFC

  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2003
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 50
    Points : 34
    Points
    34
    Par défaut [MFC] Problème de com TCP entre appli PC et appli Pocket PC
    salut,

    j'ai réalisé un tuyau entre un client TCP sur pocket PC et un serveur TCP sur PC.
    Apres a voir envoyé un message vers le serveur PC, je souhaite directement dans le OnReceive() du serveur renvoyer un message de confirmation de bonne reception...
    Le Send(...) a l'air de bien se dérouler car il me retourne le bon nombre d'octets envoyés mais la fonction OnReceive() coté client TCP sur PDA n'est jamais notifiée (je l'ai bien sur surchargé au préalable...)
    voilà ma methode OnReceive() du serveur TCP sur le PC:
    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
     
    CAsyncSocket::OnReceive(nErrorCode);
     
    	char MsgRecu[2096]; // définition du buffer
    	int iVitesse = 0;
    	int iTaille = Receive(MsgRecu, 2096); // Réception qui retourne le nombre d'octets reçus	
    	MsgRecu[iTaille] = '\0';
    char cPort[4];
    		for (int i = 1 ; i <= 4 ; i++)
    		{
    			cPort[i-1] = MsgRecu[i];
    		}		
    		m_uiPortEcouteClient = atoi(cPort);
    		m_sImmatriculation = &MsgRecu[i];
     
    		//Ajout du nouvel usager dans la liste et dans l'arbre				
    		((CMainFrame*) m_pMainFrame)->AjouterUsager( this);		
     
    		char* cBuffer;
    		CString sBuffer;
    		sBuffer = "Détection OK";
    		cBuffer = sBuffer.GetBuffer(0);
    		int iTaille = sBuffer.GetLength();
    		int j = this->Send(cBuffer,iTaille);
    Et pour la réception j'ai juste mis un breakpoint dans la fonction OnReceive() mais je n'y vais jamais...

    Donc si quelqu'un pense pouvoir m'eclaircir ca serait cool

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    je suppose que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CAsyncSocket::OnReceive(nErrorCode);
    le ; c'est une erreur de recopie ?
    la signature exact c'est :
    CAsyncSocket::OnReceive
    virtual void OnReceive( int nErrorCode );
    l'objet qui recoit il est initialisé ? le handle m_hSocket est valide (<> NULL) ?


  3. #3
    Nouveau membre du Club
    Inscrit en
    Novembre 2003
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 50
    Points : 34
    Points
    34
    Par défaut
    Non mais le bout de code que j'ai mis fonctionne très bien vu que je reçois bien ma donnée, c'est dans la dernière ligne du code au niveau du "Send()" et surtout de la reception de ce Send de l'autre coté du tuyau qu'est le problème.
    Le "Send()" me retourne bien le nombre d'octets envoyés (ici 12), mais coté Pocket PC je suis pas notifié sur le OnReceive()
    Voila la méthode OnReceive() coté Pocket PC que je surcharge dans la classe CSocketClientTcp.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void CSocketClientTcp::OnReceive(int nErrorCode) 
    {
    	CCeSocket::OnReceive(nErrorCode);
                    char buf[100];
                    Receive (buff,100); 
    }
    Pour ce qui est de l'erreur que tu signale sur la syntaxe du OnReceive(), je n'ai fait qu'implémenter la méthode grace au Class Wizard donc la syntaxe est la bonne, surtout que ce n'est pas la rpemière fois que je l'implante.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Novembre 2003
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 50
    Points : 34
    Points
    34
    Par défaut
    toujours pas d'aide possible sur mon post?
    n'hésitez pas en tout cas, parce que là je galère enorme.
    je vous explique rapide l'algo de mon appli:

    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
     
       Monde PC                           Monde Pocket PC
     
    Creation Client UDP------------->> Serveur UDP
    et envoi                               |--> OnReceive()
    Creation Serveur TCP                       {
                                                    .....
                                                    Création Client TCP et envoi 
                                                    Send()
                                                 }               |
    Réception dans Serveur TCP <<--------------------------------|
    OnReceive()
    {
    ...
    Send()    // (envoi au client TCP déjà créé)
    } |
      |--------------------------------------------> OnReceive() du client TCP
                                                                   Méthode surchargée dans la classe Client TCP déjà instanciée.
    Le problème se situe en fait dans la dernière transmission, de l'envoi du serveur TCP vers la reception du client TCP.
    L'envoi ne retourne pas d'erreur et retourne le bon nombre d'octets envoyés mais la méthode OnReceive() du client TCP n'est jamais appelée...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/05/2011, 01h59
  2. Com TCP/IP Problème TClientSocket et Indy
    Par Tleconte dans le forum Web & réseau
    Réponses: 3
    Dernier message: 04/07/2008, 10h07
  3. Réponses: 5
    Dernier message: 29/03/2007, 22h26
  4. [MFC] problème d'éxécution
    Par ben_iap dans le forum MFC
    Réponses: 2
    Dernier message: 15/03/2004, 10h31
  5. Réponses: 3
    Dernier message: 04/02/2004, 18h35

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