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 :

probl�me avec TWinSocketStream!


Sujet :

C++Builder

  1. #1
    Membre averti
    Inscrit en
    Ao�t 2006
    Messages
    47
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2006
    Messages : 47
    Par d�faut probl�me avec TWinSocketStream!
    Bonjour,
    j'ai un probl�me dans la lecture des r�ponses depuis un serveur(messages xml), ce probl�me est seulement dans le cas o� les messages sont de grande taille voici le code:

    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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    int i_ReadResponse( _di_IXMLDocument &l_o_ResponseDocXML)
    {
      // Function return value
      int l_i_Reply;
     
      //Response
      _di_IXMLDocument l_o_DocXML;
      TWinSocketStream *l_o_ResponseStream;
      char l_c_ResponseBuffer[BUFFERSIZE];
      bool l_b_ResponseWaited;
      long l_l_ResponseLength;
      AnsiString  l_str_XMLResponse; 
      long l_ul_XmlLength;
      int l_i_XmlErrorCode;
      int l_i_XmlErrorLineNumber; 
      int l_i_XmlErrorLinePos;
      DOMString l_o_XmlErrorReason;
      DOMString l_o_XmlErrorSrcTex;
      AnsiString l_str_ResponseCode;
      AnsiString l_str_ReponseMsg;
      AnsiString  l_str_Response;
     
      // Response recieving
      g_str_Message = g_str_Message + "---  channels Read Response ---" + AnsiString("\n");
     
      //Read Response 
      l_o_ResponseStream = new TWinSocketStream(g_ClientSocket_Dest->Socket,CLIENTWAITTIME);     
      memset(l_c_ResponseBuffer, 0, BUFFERSIZE); // initialize the buffer 
     
      //Give the server 60 seconds to start writing
      l_b_ResponseWaited = l_o_ResponseStream->WaitForData(CLIENTWAITTIME);      
     
      // Store Response
      if (l_b_ResponseWaited)
    	{
    	  if ((l_l_ResponseLength =l_o_ResponseStream->Read(l_c_ResponseBuffer,BUFFERSIZE))== 0) // if can't read in 60 seconds
    	    {
    	      g_ClientSocket_Dest->Socket->Close();           // close the connection
    	      l_i_Reply = -1;
    	    }
    	}
      else
        {
          g_ClientSocket_Dest->Socket->Close();      // if client doesn't start, close the socket and send error messgage(TimeOPut)
          g_str_Message = g_str_Message + "*** ! TimeOut, no response from MuxConfig Agent " + AnsiString("\n");
          l_i_Reply = -1;
        }
     
      // Response analysis
      l_str_XMLResponse = AnsiString(l_c_ResponseBuffer+4); 
     
      // Response length   
      l_ul_XmlLength = ((u_long)(((u_char *)l_c_ResponseBuffer)[0]))*0x1000000
        + ((u_long)(((u_char *)l_c_ResponseBuffer)[1]))*0x10000
        + ((u_long)(((u_char *)l_c_ResponseBuffer)[2]))*0x100
        + ((u_long)(((u_char *)l_c_ResponseBuffer)[3]));    
     
      //message length check
      l_l_ResponseLength =l_l_ResponseLength-4;
     
      if(l_l_ResponseLength < l_ul_XmlLength) 
        {
          g_str_Message = g_str_Message + "MuxConfig response is short, only "+ l_l_ResponseLength+ " bytes "
    	+  "are recieved, wait "+l_ul_XmlLength+ " bytes " + AnsiString("\n");
        }
      else if(l_l_ResponseLength > l_ul_XmlLength)
        {
          g_str_Message = g_str_Message + "MuxConfig response is long, "+  l_l_ResponseLength+ " bytes "
    	+  "are recieved, wait only "+l_ul_XmlLength + " bytes " + AnsiString("\n");
    	}
      else
        {     
          g_str_Message = g_str_Message+ "*** Recieve " +AnsiString(l_l_ResponseLength)+ " Bytes" +" (leng correct)" +AnsiString("\n");
        }  
     
     
     
      // Check if there is any error in XML format
      try
        {
          // response is stored in XMLDocument for parsing 
          l_o_DocXML = LoadXMLData(l_str_XMLResponse);
          l_o_DocXML->Active = true;
          l_o_DocXML->SaveToFile("server_to_client");
     
        }
      catch (EDOMParseError &e)
        {
    	  l_i_XmlErrorCode = e.EDOMParseError::ErrorCode;
    	  l_i_XmlErrorLineNumber = e.EDOMParseError::Line; 
    	  l_i_XmlErrorLinePos = e.EDOMParseError::LinePos;
    	  l_o_XmlErrorReason = e.EDOMParseError::Reason;
    	  l_o_XmlErrorSrcTex =e.EDOMParseError::SrcText;
    	  g_str_Message = g_str_Message + "*** ! "+ +e.Message.c_str()+ AnsiString("\n");     
    	  g_str_Message = g_str_Message + "*** ! EDOMParseError: An invalid charachter was found in XML file . Line:"
    	    + "[ " +AnsiString(l_i_XmlErrorLineNumber) + " ]" + " Position: "
    	    + "[ " +AnsiString(l_i_XmlErrorLinePos) +    " ]" + " at Text: " 
    	    + "[ " +AnsiString(l_o_XmlErrorSrcTex) +     " ]" + " The reason is: "
    	    + "[ " +AnsiString(l_o_XmlErrorReason) +     " ]" + " Error Code : "  
    	    + "[ " +AnsiString(l_i_XmlErrorCode ) +      " ]" +  AnsiString("\n");   
    	  l_i_Reply = -1;
        }
     
     
      // Out 
      l_o_ResponseDocXML =l_o_DocXML;
     
      // return
      return(l_i_Reply);
    }
    mais quand je change le traitement, je r�cup�re caract�re par caract�re ca marche mais ca prend beaucoup de temps(60s a peut pr�s)

    merci d'avance.

  2. #2
    Membre averti
    Inscrit en
    Ao�t 2006
    Messages
    47
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2006
    Messages : 47
    Par d�faut
    s'il vous plais est ce qu'il ya une solution ou pas?

Discussions similaires

  1. VC++ Direct3D8, probl�me avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    R�ponses: 3
    Dernier message: 03/08/2002, 11h10
  2. Probl�me avec [b]struct[/b]
    Par Bouziane Abderraouf dans le forum CORBA
    R�ponses: 2
    Dernier message: 17/07/2002, 10h25
  3. Probl�me avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    R�ponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Probl�me avec la m�moire virtuelle
    Par Anonymous dans le forum CORBA
    R�ponses: 13
    Dernier message: 16/04/2002, 16h10

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