|
Помогите разобрать StreamReader? Зависает...
|
|||
---|---|---|---|
#18+
Выполняю HTTP запрос: HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(url); wr.Timeout = 50000; WebResponse resp = wr.GetResponse(); Encoding encode = System.Text.Encoding.GetEncoding("Windows-1251"); Stream stream = resp.GetResponseStream(); StreamReader sr = new StreamReader(stream, encode); if (sr.EndOfStream) break; string ret = ""; while (true) { string s = sr.ReadLine(); if(s==null) break; ret += s; } //ret = sr.ReadToEnd(); Проблема в том что sr.ReadLine(); в цикле иногда зависает намертво (ну или sr.ReadToEnd();) на ооочень долгий срок, после этого отвисает с сообщение по таймауту но у StreamReader вроде нет таймаута? как этого избежать? и почему он зависает? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2008, 12:45 |
|
Помогите разобрать StreamReader? Зависает...
|
|||
---|---|---|---|
#18+
helloword... но у StreamReader вроде нет таймаута? как этого избежать? и почему он зависает? Скорее всего "зависает" канал связи, попробуйте читать "порциями", а не строчками: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2008, 13:13 |
|
Помогите разобрать StreamReader? Зависает...
|
|||
---|---|---|---|
#18+
Здесь не то. Канал "работает" на WebResponse resp = wr.GetResponse(); После этого ответ на запрос уже на клиенте. У меня написано вот так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Код: plaintext 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2008, 13:20 |
|
Помогите разобрать StreamReader? Зависает...
|
|||
---|---|---|---|
#18+
qu-qu +1 ReadLine - читает до конца строки, а этот конец - это два символа "line feed" и "carrige return" в бинарном виде 10 и 13 (если не перепутал) Если их не будет - StreamReader будет их ждать. то есть, использовать ReadLine можно только по отношению к гарантированно правильно отформатированному текстовому файлу. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2008, 13:23 |
|
Помогите разобрать StreamReader? Зависает...
|
|||
---|---|---|---|
#18+
vagner забывший парольЗдесь не то. Канал "работает" на WebResponse resp = wr.GetResponse(); После этого ответ на запрос уже на клиенте... Э-хе-хе, ну зачем вы говорите всегда то, в чем не до конца разобрались? Зачем тогда, по-вашему, в HttpWebResponse сделана "потоковая модель" обмена данными? Что, по-вашему, должен "поточить" GetResponseStream() если все данные в нем "приходят" за 1 раз и целиком? Попробуйте сделать вот это (и полюбуйтесь на консольный вывод): Код: plaintext 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.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
> get-http-response.exe http://localhost/buffered-write.asp ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2008, 15:23 |
|
Помогите разобрать StreamReader? Зависает...
|
|||
---|---|---|---|
#18+
Доверюсь Вам без запуска предложенного кода. Если честно - у меня такое впечатление сложилось чисто от хождения дебагером по строчкам, респонс ждал долго а потом все быстро проскакивало. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2008, 16:08 |
|
Помогите разобрать StreamReader? Зависает...
|
|||
---|---|---|---|
#18+
qu-qu, здравствуйте. У меня также возникла данная проблема. Хотел воспользоваться вашим решением. Но в этой строчке: Код: c# 1.
ругается на то, что Read не может читать char[]. Ему байты подавай. Не подскажите как это исправить? Заранее спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2015, 13:08 |
|
Помогите разобрать StreamReader? Зависает...
|
|||
---|---|---|---|
#18+
orl412, buffer - какого типа? Нужно byte[] ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2015, 14:11 |
|
Помогите разобрать StreamReader? Зависает...
|
|||
---|---|---|---|
#18+
orl412, а нафига вообще читать в char[]? char[] по сути и так является байтом и имеет соответствующие методы преобразования типа из одного типа в другой на базе интерфейса IConvertible у char Код: c# 1. 2. 3. 4.
у byte Код: c# 1. 2. 3. 4.
читайте в байтах и преобразовывайте в символы, кто вам мешает? только 1 не понятно, нафига это вообще нужно. Для чтения и записи в файл существуют более удобные способы, не требующие работать с потоком напрямую. Не думаю, что у вас задача настолько тонкая, что в этом есть необходимость. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2015, 14:46 |
|
Помогите разобрать StreamReader? Зависает...
|
|||
---|---|---|---|
#18+
Roman Mejtes, читаем не из файла, а с GetResponse, то есть ответ от сервера. Иногда читается нормально, иногда виснет. Вообще, я делаю это так: Код: c# 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2015, 15:31 |
|
Помогите разобрать StreamReader? Зависает...
|
|||
---|---|---|---|
#18+
Прошу прощения, нечаянно отправилось. В общем я делаю это так: Код: c# 1. 2. 3. 4. 5. 6. 7.
Но, видимо, нужно читать побуферно. Переделал так: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Так тоже не работает. buffer, думаю, надо все-таки в чарах держать, но stream не умеет чары читать. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2015, 15:36 |
|
Помогите разобрать StreamReader? Зависает...
|
|||
---|---|---|---|
#18+
Roman Mejteschar[] по сути и так является байтом char занимает два байта, но это деталь реализации на которую не стоит полагаться. Roman Mejtesмеет соответствующие методы преобразования типа из одного типа в другой на базе интерфейса IConvertible Преобразование byte[] <-> string следует выполнять с помощью класса Encoding. Методы IConvertible сработают только для ограниченного набора символа из кодировки ASCII. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2015, 15:41 |
|
Помогите разобрать StreamReader? Зависает...
|
|||
---|---|---|---|
#18+
bazileRoman Mejteschar[] по сути и так является байтом char занимает два байта, но это деталь реализации на которую не стоит полагаться. Roman Mejtesмеет соответствующие методы преобразования типа из одного типа в другой на базе интерфейса IConvertible Преобразование byte[] <-> string следует выполнять с помощью класса Encoding. Методы IConvertible сработают только для ограниченного набора символа из кодировки ASCII. ну это зависит от того, что и во что он преобразует, так сказать вопрос реализации. Если автор получает Respone от сервера, то там скорее всего некий XML или JSON, который можно спокойно сериализовать без лишних проблем. Если сервер просто возвращает всякие строки, то для чтения из потока есть всякие StringReader'ы и другие классы, облегчающие чтение из потока, без всяких побайтных чтений ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2015, 16:44 |
|
|
start [/forum/topic.php?fid=20&msg=39028902&tid=1401290]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
39ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
others: | 322ms |
total: | 464ms |
0 / 0 |