Использовал в своем классе пример из МСДН,но только вот он не работает как надо Данные считывается не полностью,смотрю в упор и невижу проблемы Ведь цикл должен длится пока поступают данные и открыт сокет... Code: public class ParseSite { private TcpClient TCl; private NetworkStream Stream; private string host; private byte[] buf; private static byte[] StrToByteArray(string str) { System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding(); return encoding.GetBytes(str); } public ParseSite(string site) { buf = new byte[1024 * 1024]; host = site; } public void Connect() { TCl = new TcpClient(host, 80); Stream = TCl.GetStream(); } private void Close() { Stream.Close(); TCl.Close(); } public string GetPage(string link) { string request = "GET /" + link + " HTTP/1.1" + "\r\nHost: " + host + "\r\nConnection: Close\r\n\r\n"; buf = StrToByteArray(request); Stream.Write(buf, 0, request.Length); StringBuilder myCompleteMessage = new StringBuilder(); int numberOfBytesRead = 0; do { numberOfBytesRead = Stream.Read(buf, 0, buf.Length); myCompleteMessage.AppendFormat("{0}", Encoding.ASCII.GetString(buf, 0, numberOfBytesRead)); } while (Stream.DataAvailable); this.Close(); return (myCompleteMessage.ToString()); } }
ТС, ситуация знакомая. У самого когда-то была такая проблема. Помню, я еще был удивлен, когда под отладчиком в пошаговом режиме все прекрасно работало, без отладчика читалась только часть данных. 1 способ: Вся проблема в этом цикле: Нельзя ориентироваться на Stream.DataAvailable, т.к. это св-во возвращает совсем не то что нужно; В рфц про протокол ХТТП четко перечислены признаки, по которым можно прекращать чтение. Т.к. у тебя сервер закрывает соединение сразу после передачи данных ("Connection: Close"), то можно выходить из цикла если numberOfBytesRead < 0; 2 способ: использовать классы HttpWebRequest\HttpWebResponse;