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.