Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Проблема с System.Net


Автор: Stalnoj 20.10.2004, 13:10
Вот код программы, кот. должна производить запрос к URI страничке. И загружать ее на компьютер. Но, как можно было уже догадаться, она не работает. Программа посылает запрос на сайт и на этом все заканчивается - ничего не происходит, данные не передаются, а через некоторое время происходит timeout соединения.

Код программы взят целиком из книги Герберта Шилдта "Полный справочник по C#" (изменены только комментарии).

У меня Visual Studio 2002. Вот собственно код:

Код
using System;
using System.Net;
using System.IO;

class NetDemo
{
public static void Main()
{
 int ch;

 try
 {
  // at first create request on URL-adress
  HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://www.osborne.com");

  // next send this request & get response
  HttpWebResponse resp = (HttpWebResponse)req.GetResponse();

  // get back-end stream from response
  Stream istrm = resp.GetResponseStream();

  // output text from stream on screen (in symbols of forty)
  for (int i = 1;; i ++)
  {
   ch = istrm.ReadByte();
   if (ch == -1) break;

   Console.Write((char) ch);
   if ((i % 400) == 0)
   {
    Console.Write("\nPress any key.");
    Console.Read();
   }
  }

  // close stream.
  resp.Close();
 }
 catch(WebException exc)
 {
  Console.WriteLine("Network error: " + exc.Message + "\nState code: " + exc.Status);
 }
 catch(ProtocolViolationException exc)
 {
  Console.WriteLine("Protocol error: " + exc.Message);
 }
 catch(UriFormatException exc)
 {
  Console.WriteLine("Format URI error: " + exc.Message);
 }
 catch(NotSupportedException exc)
 {
  Console.WriteLine("Unknown protocol: " + exc.Message);
 }
 catch(IOException exc)
 {
  Console.WriteLine("I/O error: " + exc.Message);
 }
}
}


В общем, программа останавливается на HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); - когда должна получить ответ от сервера.

Даже фаервол пробовал отключать... - бестолку.

Подскажите что-нибудь?

Автор: Mad 20.10.2004, 13:14
Что значит останавливается ?
Просто ничего не делает - тогда она просто ждет ответ сервера :)
Если выбрасывает ошибку, то какую ?

Автор: Stalnoj 21.10.2004, 00:40
Да, она просто ждет ответа от севера. И ждет и ждет... (Без разницы, какой указать URI)

А ошибку через несколько минут выбрасывает следующую:
Network error: The operation has time-out.
State code: Timeout

Автор: Vaulter 21.10.2004, 09:38
значит не доходит до сервера.
вот такой коду меня работает уже в программе, введенной в экплуатацию ;) :
Код

HttpWebRequest HttpWReq =
   (HttpWebRequest)WebRequest.Create("http://172.16.5.9/news/account.cgi?adr="+ip);
  if(((frmMain)gpbParent.Parent).AppSettings.GetValue("useieproxy").ToString()=="no")
  {
   HttpWReq.Proxy=GlobalProxySelection.GetEmptyWebProxy();
  }
  HttpWReq.Timeout=5000;//5 second
  try
  {
   HttpWebResponse HttpWResp = (HttpWebResponse)HttpWReq.GetResponse();
   // Insert code that uses the response object.
   Stream rStream=HttpWResp.GetResponseStream();
   Encoding encode = System.Text.Encoding.GetEncoding("windows-1251");
   // Pipes the stream to a higher level stream reader with the required encoding format.
   StreamReader readStream = new StreamReader( rStream, encode );

   string answer="";
   char[] read = new char[2560];
   int count = readStream.Read(read, 0, 2560 );
   //lblStat.Text+=read;
   while (count > 0)
   {
    string str = new String(read,0,count);
    answer+=str;
    count = readStream.Read(read, 0, 2560);
   }
   readStream.Close();
   HttpWResp.Close();
   //got answer, now parse it!
///////////////////////////////////////////////////////////////////
// your code here - in answer - string that got from URI
///////////////////////////////////////////////////////////////////
  }
  catch(Exception E)
  {
   //MessageBox.Show(E.Message,E.GetType().FullName);
   lblIngoing.Text=lblOutgoing.Text=E.Message;
   lblIngoing.ForeColor=lblOutgoing.ForeColor=System.Drawing.Color.Red;
   outgoing=ingoing=-1;//all is red

  }



Автор: Stalnoj 21.10.2004, 15:38
Хм... Бред какой-то! Все равно выдает "The operation has timed-out"
Из-за чего это вообще может быть?

Автор: stab 21.10.2004, 15:41
Похоже что проблема на сервере, что за сервер?

Автор: Mad 21.10.2004, 15:51
Stalnoj
Может у тебя прокси неправильно настроен (если есть)

Автор: Vaulter 22.10.2004, 09:35
Stalnoj
ты пинговать то пробовал?
telnet ом на 80 порт подолбись...

Автор: Stalnoj 22.10.2004, 12:38
cully
В смысле сервер? Сервер, которому я соединяюсь? Ну, так пробовал ко многим сайтам.
А если у меня на компьютере. Дык у меня инет диалап, Windows XP SP2 (правда не релиз сервис пака). Или нужно, чтобы был установлен IIS?

Mad
Прокси у меня нету. (Диалап ведь) Есть фаевол, но я его отключал. Не помогает. Может проблема с KAV? Попробую отключить его....

Vaulter
Хм.. Кого пинговать? Сервак, к корому я коннекчусь? Я же написал, что ко многим сайтам пытался. Пытался и к майл.ру (194.67.57.26), уж он точно пингуется... Или я чего-то не понимаю?

Автор: stab 22.10.2004, 13:13
Цитата
Или нужно, чтобы был установлен IIS?

Не нужно. Что делать даже не знаю...

Автор: Vaulter 22.10.2004, 14:10
Stalnoj
в коммандной строке набери:
ping osborne.com

Автор: Stalnoj 24.10.2004, 14:58
набрал, osborne.com не пингуется... Но я же не только на нем пробовал, mail.ru, наример, и многое другое.. пингуется, ответ возвращается...

Автор: Kurt 24.10.2004, 20:07
Цитата
набрал, osborne.com не пингуется..

Ну, если не пингуется, что ж ты к нему коннектишься?
Попробуй поработать с другим сервером, скажем, тот же mail.ru.
Кстати, ты, может, описку сделал?
Там, случаем, не "osbourne.com"? Он пингуется. :)

Автор: Tomcat 26.10.2004, 16:15
Цитата(Stalnoj @ 24.10.2004, 14:58)
набрал, osborne.com не пингуется... Но я же не только на нем пробовал, mail.ru, наример, и многое другое.. пингуется, ответ возвращается...

Попробуй поставить у себя какой-нить HTTP-сервер (тот же IIS пойдет), попробуй свой код на localhost. Если заработает, то у тебя какая-то проблема с конектом на удаленные машины...

Автор: Stalnoj 26.10.2004, 17:06
Kurt
Ну, ты чего? Я же написал, что пробовал уже и с mail.ru, и со многими другими серверами (и не раз писал).


Tomcat
Угу, спасибо, попробую... У меня установлен Apache.

Автор: Kurt 27.10.2004, 00:26
Цитата
Ну, ты чего?

Извиняй, это, наверное, у меня башню снесло - я не правильно тебя понял. :)

Автор: mr.DUDA 28.10.2004, 21:58
Я протестил твою прогу, даже после успешного получения страницы с www.yahoo.com, прога пытается читать дальше ! Вплоть до тайм-аута. То есть, тебе просто нужно вставить оператор break в скобку где размещены

Console.Write("\nPress any key.");
Console.Read();

и всё.

Автор: Stalnoj 1.11.2004, 17:07
mr.DUDA
Проблема не в том, что прога дальше продолжает качает. Она вообще не качает! Никакого соединения =(((
Запрос посылается, а ответ не возвращается. Вот.

Автор: Vaulter 2.11.2004, 08:20
Stalnoj
это проблема у тебя. с сервером все в порядке
настрой сеть!

Автор: Tomcat 2.11.2004, 11:10
Stalnoj
Мож с DNS какая беда приключилась?
Попробуй напрямую через IP адрес.
Еще можешь попробовать зарезолвить адрес строчкой:
Код

IPHostEntry hostInfo = Dns.GetHostByName("mail.ru");

Чего он ответит?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)