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

VB 6 et antérieur Discussion :

[VB]Winsock - Variable trop courte ?


Sujet :

VB 6 et antérieur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 3
    Par défaut [VB]Winsock - Variable trop courte ?
    Bonjour,

    Je suis en train de développer une application en VB qui utilise le contrôle Winsock.
    Cette application envoie successivement 5 requètes (avec récupération de données).

    Tout se passe bien jusqu'à la 4e : les données reçues (_DataArrival) sont "coupées", et celà presque toujours au même endroit.

    La variable utilisée est de format STRING, donc je ne crois pas qu'il s'agisse d'un soucis de taille ...

    Quant à la requète envoyée, elle ne comporte aucune erreur, le problème ne vient donc pas non plus de là.

    Merci d'avance,

    Ben

  2. #2
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Je n'ai jamais utilisé Winsock mais...

    Dans ton flux entrant, tu n'as pas un caractère qui pourrait être interprété comme une fin de données?
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  3. #3
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Par défaut
    Je lis celà :
    This event will not occur if you do not retrieve all the data in one GetData call. It is activated only when there is new data. Use the BytesReceived property to check how much data is available at any time.
    et souhaiterais connaitre toutes les instructions que tu as insérées dans l'événement SataArrival de ton contrîle Winsock (de "private sub... jusqu'à End sub)

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 3
    Par défaut
    Tout d'abord, merci pour ces réponses si rapides !

    Voici une partie de ma source :

    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    Private Sub wscHttp_DataArrival(ByVal bytesTotal As Long)
     
       Dim strData As String
     
       wscHttp.GetData strData
       m_strHttpResponse = ""
       m_strHttpResponse = m_strHttpResponse & strData
     
    Select Case state
     
    Case "cookies"
     
    ' Récupération valeur cookies
    lsua = Entre(m_strHttpResponse, "nsa=", ";")
    lsub = Entre(m_strHttpResponse, "nsb=", ";")
    LBC = Entre(m_strHttpResponse, "nbc=", ";")
    lsud = Entre(m_strHttpResponse, "nsud=", ";")
     
    List1.AddItem "Connecting to ../lsu/login.php"
     
    wscHttp.Close
    state = "sendtochat"
    wscHttp.Connect chathost, 80
     
    Case "sendtochat"
     
    ' Récupération URL Parser_machin.aspx
    url_parser_lycos = Entre(m_strHttpResponse, "Location:", "C")
    url_parser_lycos = Replace(url_parser_lycos, " ", "")
    url_parser_lycos = Replace(url_parser_lycos, vbCrLf, "")
     
    List1.AddItem "Connecting to ../lsu/SendChat.aspx"
     
    ' Au suivant ^^
     
    wscHttp.Close
    state = "parserconnect"
    wscHttp.Connect srvhost, 80
     
    Case "parsertoto"
     
    ' Récupération URL Login.aspx
     
    cn = Entre(m_strHttpResponse, "cn=", "&n=")
    ss = Entre(m_strHttpResponse, "ss=", "&ref=")
    ref = Entre(m_strHttpResponse, "ref=", "&h=")
    h = Entre(m_strHttpResponse, "h=", "&hs=")
    hs = Entre(m_strHttpResponse, "hs=", "&p=")
    p = Entre(m_strHttpResponse, "p=", "&t=")
    t = Entre(m_strHttpResponse, "t=", "&l=")
    l = Entre(m_strHttpResponse, "l=", "&fp=")
     
    url_login = "http://" & LCase$(Connection.host.text) & ".machintruc.com/login/Login.aspx?cn=" & cn & "&n=" & Connection.login.text & "&ss=" & ss & "&ref=" & ref & "&h=" & h & "&hs=" & hs & "&p=" & p & "&t=" & t & "&l=" & l & "&fp=0&b="
     
     
     
    'MsgBox url_login
     
    List1.AddItem "Connecting to ../login/Parser_truc.aspx"
     
    DebugForm.DebugTXT = m_strHttpResponse
    DebugForm.Show
     
    ' C'EST ICI QUE SE SITUE L'ERREUR : DebugFrom.DebugTXT ne m'affiche qu'une partie de ce que je devrais recevoir ...
     
    wscHttp.Close
     
    End Select
     
    End Sub
    J'ai volontairement modifié certaines parties, mais je pense qu'il s'agit là d'un bon apperçu malgré tout.

  5. #5
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Par défaut
    Non ! Le prtoblème est à mon avis décelable beaucoup plus haut...

    insères donc un simple msgbox m_strHttpResponse tout de suite après :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim strData As String 
     
       wscHttp.GetData strData 
       m_strHttpResponse = "" 
       m_strHttpResponse = m_strHttpResponse & strData
    pour voir ce que contient à ce niveau déjà m_strHttpResponse

    je ne comprends d'ailleurs pas pourquoi (çà ne changera rien mais...) tu n'as pas écrit directement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m_strHttpResponse = strData
    Y-a-t-il une bonne raison qui m'échappe ?

  6. #6
    Membre expérimenté Avatar de AdHoc
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 245
    Par défaut
    bonjour,
    j'ai déjà constaté que le datarrival se déclenche avant la reception compléte du message (ou avec deux message "collés").
    Pout test, ecrit une routine qui sur un timer scrute la propriété bytesreceived et recupere les chaines reçues en les concaténant .
    Déjà tu pourras vérifier si le message arrive complétement.
    si tu as possibilité, le mieux est d'encadrer les trames par une chaine (ou un caractere) de début et de fin.

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 3
    Par défaut
    Citation Envoyé par jmfmarques
    Non ! Le prtoblème est à mon avis décelable beaucoup plus haut...

    insères donc un simple msgbox m_strHttpResponse tout de suite après :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim strData As String 
     
       wscHttp.GetData strData 
       m_strHttpResponse = "" 
       m_strHttpResponse = m_strHttpResponse & strData
    pour voir ce que contient à ce niveau déjà m_strHttpResponse

    je ne comprends d'ailleurs pas pourquoi (çà ne changera rien mais...) tu n'as pas écrit directement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m_strHttpResponse = strData
    Y-a-t-il une bonne raison qui m'échappe ?
    Je voulais remettre m_strHttpResponse à zéro avant de lui attribuer une nouvelle valeur (au cas où je relancerais toute la connexion) :]

    bonjour,
    j'ai déjà constaté que le datarrival se déclenche avant la reception compléte du message (ou avec deux message "collés").
    Pout test, ecrit une routine qui sur un timer scrute la propriété bytesreceived et recupere les chaines reçues en les concaténant .
    Déjà tu pourras vérifier si le message arrive complétement.
    si tu as possibilité, le mieux est d'encadrer les trames par une chaine (ou un caractere) de début et de fin.
    Oui, en fait il m'arrive de recevoir deux messages successivement, lorsque je ne clos pas la connexion.

Discussions similaires

  1. Session trop courte
    Par tigunn dans le forum Evolutions du club
    Réponses: 5
    Dernier message: 11/08/2006, 15h35
  2. Input trop court?
    Par picsoun dans le forum Langage
    Réponses: 4
    Dernier message: 21/05/2006, 13h52
  3. [vba-excel] Le temps de fermeture trop court ?
    Par Damsou dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/01/2005, 10h03
  4. [LINUX][INSTALL]Error de fichier trop court
    Par silvermoon dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 06/08/2004, 16h17

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