|
|
|
|
Автор:
|
Anonymous
|
|
Тема:
|
RE: Проблема с Socket в .NET
|
|
Дата:
|
23.12.2009 11:01:00
|
хех, сейчас тоже столкнулся с такой фигней.
ничего кроме этого вопроса по данной теме не нашел :)
в общем, тормоза на акцепте.
так вот, если коннектиться не по имени, а по ip задержки нет.
>Я пишу маленькое приложение, которое использует System.Net.Sockets. Для того, чтобы сервер "слушал" клиентов я пишу что-то вроде:
>
>static void Main(string[] args)
>{
> TcpListener tcpl = new TcpListener(8888);
> tcpl.Start();
> int requestnumber = 0;
> while (true)
> {
> Console.WriteLine("Waiting...");
> TcpClient tcpclient = tcpl.AcceptTcpClient();
> Console.WriteLine("Request " + (++requestnumber).ToString());
> tcpclient.Close();
> }
>}
>
>и клиент:
>
>static void Main(string[] args)
>{
> DateTime timebegin = DateTime.Now;
> for(int i = 0; i < 100; i++)
> {
> HttpWebRequest wReq =
>(HttpWebRequest)WebRequest.Create(@"http:\\localhost:8888");
> wReq.Method = "POST";
> byte[] bytes = System.Text.Encoding.ASCII.GetBytes("Hello");
> wReq.ContentLength = bytes.Length;
> try
> {
> using(Stream outputStream = wReq.GetRequestStream())
> outputStream.Write (bytes, 0, bytes.Length);
> }
> catch(Exception) {}
> try
> {
> HttpWebResponse wResp = (HttpWebResponse)wReq.GetResponse();
> using(StreamReader reader = new
>StreamReader(wResp.GetResponseStream(),System.Text.Encoding.UTF8))
> reader.ReadToEnd();
> }
> catch(Exception) {}
> }
> Console.WriteLine((DateTime.Now - timebegin).ToString());
> Console.ReadLine();
>}
>
>Все работает нормально, кроме одного - слишком долго обрабатывается запрос от клиента. Порядка 300-400 миллисекуд. Причем "тормоз" происходит именно на
>строчке TcpClient client = listener.AcceptTcpClient(); ПРи всем при том, загруженность процессора порядка 1-2 процентов и винчестер "молчит". Т.е. - дело не в ресурсах...
>Что происходит? Почему так долго? Есть ли какой-то вариант от этого избавиться?
>
>
|
|
|
|