Arjuna Aircraft Ident.: F-MBSD | J'ai un souci, ça merde
Bon, vu que de toute façon, il faut que je fasse des readline dedans, et que j'ai pas envie de bouffer plein de mémoire avec les 280 Ko du fichier à traîter, j'ai décidé de passer par un fichier temporaire.
Seulement, j'ai un problème pour lire le dernier bout, qui est plus petit que le buffer : ça plante pas vraiment, mais le programme se bloque et ne fait rien (même symptôme si je met en chaîne de caractères).
Ci-dessous la class que j'ai fait :
Code :
- public class http
- {
- const int BUF_SIZE = 4096;
- public string Get(string host, string path, int port)
- {
- string res = "";
- int lg;
- try
- {
- System.IO.StreamWriter fic = new System.IO.StreamWriter("data.tmp", false, System.Text.Encoding.ASCII, BUF_SIZE);
- System.Text.ASCIIEncoding a = new System.Text.ASCIIEncoding();
-
- System.Net.Sockets.TcpClient s = new System.Net.Sockets.TcpClient(host, port);
- System.Net.Sockets.NetworkStream n = s.GetStream();
- string req = "GET " + path + " HTTP/1.1\r\nHost: " + host + "\r\n\r\n";
-
- n.Write(a.GetBytes(req),0,req.Length);
-
- string head;
- // on ne gère que le texte ( pas les images )
- System.IO.StreamReader sr = new System.IO.StreamReader(n);
- while ( (head = sr.ReadLine()).Length > 0 )
- {
- // res += head + "\r\n";
- }
- // res += "\r\n";
- int size;
- char[] buf = new char[BUF_SIZE];
- while ( (lg = sr.Read(buf,0,BUF_SIZE)) > 0)
- {
- fic.Write(new String(buf).Substring(0,lg).Replace("\r\n","\n" ));
- }
- sr.Close();
- }
- catch (Exception e )
- {
- res = e.ToString();
- }
- return res;
- }
- }
|
Ca bloque là :
Code :
- while ( (lg = sr.Read(buf,0,BUF_SIZE)) > 0)
|
(ou la ligne du dessous, je sais pas) |