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

C++Builder Discussion :

Probleme recuperation fenetre DOS sous BCB


Sujet :

C++Builder

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 28
    Points : 18
    Points
    18
    Par défaut Probleme recuperation fenetre DOS sous BCB
    Bonjour,

    Je suis en train de realiser un petit outil telnet afin de faciliter la gestion de firewall sous visual C++.

    Mon probleme se situe sur la fenetre VC++. En effet, je n'arrive pas a recuperer la chaine de text.

    Je m'explique: lorsque je me connecte grace a mon ClientSocket, je souhaiterais recuperer la chaine de text qui me demande d'entrer mon loggin et de l'afficher sous VC++.

    Lorsque j'utilise la fonction Socket->ReceiveText() la chaine recuperée est sous un format incomprehensible par VC++.
    J'ai essayer avec la fonction ReceiveBuf() sans succes non plus

    Comment faire?

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    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 382
    Points : 41 589
    Points
    41 589
    Par défaut
    Qu'est-ce que le "Format incompréhensible" ?

    Et pour les fonctions texte Windows: Peut-être y a-t-il un conflit entre les versions ASCII étendu et Wide... Compiles-tu en Unicode?

    PS: MSDN ne me dit rien, ni pour ReceiveBuf() ni pour ReceiveText()...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 28
    Points : 18
    Points
    18
    Par défaut
    J'entends par format incomprehensible par des caractere spéciaux :ÿýÿý ÿý#ÿý'

    Je compile avec visual C++ betement :p

  4. #4
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 282
    Points : 11 036
    Points
    11 036
    Par défaut
    Cela ressemble à un problème de mauvaise gestion de la mémoire / buffer overflow.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 28
    Points : 18
    Points
    18
    Par défaut
    Je ne comprend pas comment il pourrait y avoir une erreur de memoire vu que je souhaite juste recuperer la premiere ligne qui demande le login sur une connexion telnet et que la connexion a l'air de bien s'effectuer.

    Pour moi il y a un probleme sur le TClientSocket au niveau du Read/Write :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void __fastcall TForm1::ClientSocket1Read(TObject *Sender,
          TCustomWinSocket *Socket)
    {
                    Memo1->Lines->Add(Socket->ReceiveText());
    }
    J'ai egalement essayer avec du ReceiveBuf() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void __fastcall TForm1::ClientSocket1Read(TObject *Sender,
          TCustomWinSocket *Socket)
    {
            char RcvBuf[2048];
     
            Socket->ReceiveBuf((void*)RcvBuf,Socket->ReceiveLength());
            Memo1->Lines->Add(RcvBuf);
    }
    Mais le resultat est le même : ÿýÿý ÿý#ÿý'

  6. #6
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 754
    Points : 10 719
    Points
    10 719
    Billets dans le blog
    3
    Par défaut
    T'es sûr que tu utilises VC++ ?

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    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 382
    Points : 41 589
    Points
    41 589
    Par défaut
    +1, c'est du code pour Borland, ça...

  8. #8
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 754
    Points : 10 719
    Points
    10 719
    Billets dans le blog
    3
    Par défaut
    Et à vu de nez tu devrais dimensionner ton buffer avec Socket->ReceiveLength()+1 (+ écrite d'un zero final), pas un arbitraire (et dangereux) 2048.

  9. #9
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 282
    Points : 11 036
    Points
    11 036
    Par défaut
    Et je rajouterai que je serais curieux de voir comment tu sérialises dans ta socket.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 28
    Points : 18
    Points
    18
    Par défaut
    Autant pour moi oui c'est du borland (au fond de moi meme j'etais persuadé que c'etait la meme chose).

    Qu'entend tu par serialiser la socket?

    J'utilise un TClientsocket que je connecte sur une adresse ainsi que le port (23) recuperé dans un Edit->Text.

    Apres j'utilise les fonction OnRead du TClientSocket pour recuperer les echanges entre mon appli et l'adresse ou je me suis connecté.

  11. #11
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 754
    Points : 10 719
    Points
    10 719
    Billets dans le blog
    3
    Par défaut
    Il parle du code qui écrit sur la socket. On voudrait voir ce que tu envoies en somme.

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 28
    Points : 18
    Points
    18
    Par défaut
    J'utilise borland C++ donc en fait j'utilise les methodes des objet TClientSocket :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ClientSocket1->Active = true;
    Ici la connexion fonctionne car aucun message d'erreur n'est renvoyé donc la liaison est bien effectuée entre le client et le "serveur"

    Ensuite les echanges se font par la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ClientSocket1->Socket->SendText(Edit4->Text);
    afin d'envoyer le login et le mot de passe de la connexion telnet

    Apres la fonction ClientSocket1Read cité precedement devrait me permetre de recuperer ce que le "serveur" renvoi.

    Un truc du genre ==> router login :

  13. #13
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 282
    Points : 11 036
    Points
    11 036
    Par défaut
    Je ne connais pas du tout cette fonction de sérialisation.
    Du coup, difficile de savoir comment circulent les chaînes (longueur envoyée devant, chaines 0-terminées, ...)
    Je vois que ce post a, à juste titre, été déplacé vers le forum de BCB où tu as plus de chances de trouver des gens qui connaissent les fonctions que tu utilises.

    Tu devrais par contre changer le titre de ton message pour signaler que tu utilises les fonctions liées aux sockets de la VCL -- enfin si tu veux un titre pertinent et espérer être lu.

  14. #14
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Salut Syl91.
    Tu a un lien qui explique les sockets dans les Tutoriels.
    Dans les exemples de BCB sur ton disque, tu a dans Internet un exemple de Chat.

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 28
    Points : 18
    Points
    18
    Par défaut
    Merci je regarde ca demain en arrivant au boulot

Discussions similaires

  1. Réponses: 5
    Dernier message: 16/03/2010, 14h48
  2. Probleme recuperation fenetre DOS sous BCB
    Par Syl91 dans le forum C++
    Réponses: 11
    Dernier message: 22/09/2006, 12h13
  3. empecher l'ouverture de la fenetre DOS sous windows
    Par fairlight dans le forum Windows
    Réponses: 3
    Dernier message: 04/08/2006, 15h13
  4. [VB6] [Système] Récupérer le contenu d'une fenêtre DOS
    Par Nounours666 dans le forum VB 6 et antérieur
    Réponses: 16
    Dernier message: 18/11/2004, 17h38
  5. [langage] fonction sleep + probleme fenetre dos
    Par yokito dans le forum Langage
    Réponses: 2
    Dernier message: 30/08/2003, 20h46

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