Listener без цикла?
От: mDmitriy Россия  
Дата: 13.06.13 07:12
Оценка: -1
Доброго всем!

Создаю Socket, подключаю его к удаленному серверу, создаю NetworkStream для этого сокета.
Далее в отдельном потоке в цикле проверяю оный NetworkStream, нельзя ли из него что-нибудь полезного от сервера прочесть.
Все работает...

Вопрос: нет ли в NET готового сетевого слушателя, чтобы работал как Timer — создал, подписался на событие о поступлении инфы, подключился и счастлив?
Re: Listener без цикла?
От: vvlad.net  
Дата: 13.06.13 07:22
Оценка: 2 (1) -1
Здравствуйте, mDmitriy, Вы писали:

D>Доброго всем!


D>Создаю Socket, подключаю его к удаленному серверу, создаю NetworkStream для этого сокета.

D>Далее в отдельном потоке в цикле проверяю оный NetworkStream, нельзя ли из него что-нибудь полезного от сервера прочесть.
D>Все работает...

D>Вопрос: нет ли в NET готового сетевого слушателя, чтобы работал как Timer — создал, подписался на событие о поступлении инфы, подключился и счастлив?


Stream.BeginRead
Re: Listener без цикла?
От: xednay89 Россия  
Дата: 13.06.13 07:22
Оценка: 2 (1)
Здравствуйте, mDmitriy, Вы писали:


D>Вопрос: нет ли в NET готового сетевого слушателя, чтобы работал как Timer — создал, подписался на событие о поступлении инфы, подключился и счастлив?


Создал, BeginReceive и счастлив
Re: Listener без цикла?
От: matumba  
Дата: 13.06.13 08:02
Оценка: -1
Здравствуйте, mDmitriy, Вы писали:

D>Вопрос: нет ли в NET готового сетевого слушателя, чтобы работал как Timer — создал, подписался на событие о поступлении инфы, подключился и счастлив?


Есть старый, добрый, блокирующий Read — как данные придут, ты об этом сразу узнаешь.
Re[2]: Listener без цикла?
От: mDmitriy Россия  
Дата: 13.06.13 08:16
Оценка:
Здравствуйте, xednay89, Вы писали:

X>Здравствуйте, mDmitriy, Вы писали:

D>>Вопрос: нет ли в NET готового сетевого слушателя, чтобы работал как Timer — создал, подписался на событие о поступлении инфы, подключился и счастлив?
X>Создал, BeginReceive и счастлив
BeginReceive требует указания количества считываемых байт, а где их взять?
У меня считывается xml по jabber-протоколу через NetworkStream прямо в XMLReader. Все хорошо, если бы не цикл в потоке.
Re[2]: Listener без цикла?
От: mDmitriy Россия  
Дата: 13.06.13 08:19
Оценка:
Здравствуйте, matumba, Вы писали:

M>Здравствуйте, mDmitriy, Вы писали:


D>>Вопрос: нет ли в NET готового сетевого слушателя, чтобы работал как Timer — создал, подписался на событие о поступлении инфы, подключился и счастлив?


M>Есть старый, добрый, блокирующий Read — как данные придут, ты об этом сразу узнаешь.

Подробнее можно, плиз?
Re[3]: Listener без цикла?
От: matumba  
Дата: 13.06.13 08:33
Оценка:
Здравствуйте, mDmitriy, Вы писали:

M>>Есть старый, добрый, блокирующий Read — как данные придут, ты об этом сразу узнаешь.

D>Подробнее можно, плиз?

var s = new Socket(...);
var buf = new byte[100];
var ReceivedBytes = s.Receive(buf);


Извините, с функцией ошибся.
Каждую принятую порцию добавляешь к существующим данным, а потом перекодируешь в строку.
Re[4]: Listener без цикла?
От: mDmitriy Россия  
Дата: 13.06.13 09:36
Оценка:
Здравствуйте, matumba, Вы писали:

M>Здравствуйте, mDmitriy, Вы писали:


M>>>Есть старый, добрый, блокирующий Read — как данные придут, ты об этом сразу узнаешь.

D>>Подробнее можно, плиз?

M>
M>var s = new Socket(...);
M>var buf = new byte[100];
M>var ReceivedBytes = s.Receive(buf);
M>


M>Извините, с функцией ошибся.

M>Каждую принятую порцию добавляешь к существующим данным, а потом перекодируешь в строку.
Опять не понял... Receive(buf) все равно ведь надо дергать в цикле?
Re[5]: Listener без цикла?
От: matumba  
Дата: 13.06.13 10:01
Оценка:
Здравствуйте, mDmitriy, Вы писали:

D>Опять не понял... Receive(buf) все равно ведь надо дергать в цикле?


В цикле, НЕ ПОЕДАЮЩЕМ РЕСУРСЫ. Т.е. вызов Receive блокирует поток, пока не придут данные.
Re: Listener без цикла?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 13.06.13 10:07
Оценка: 2 (1)
Здравствуйте, mDmitriy, Вы писали:

D>Вопрос: нет ли в NET готового сетевого слушателя, чтобы работал как Timer — создал, подписался на событие о поступлении инфы, подключился и счастлив?


System.Net.Sockets.TcpListener не подойдет?
... << RSDN@Home 1.2.0 alpha 5 rev. 99 on Windows 8 6.2.9200.0>>
AVK Blog
Re[6]: Listener без цикла?
От: mDmitriy Россия  
Дата: 13.06.13 10:12
Оценка:
Здравствуйте, matumba, Вы писали:

M>Здравствуйте, mDmitriy, Вы писали:


D>>Опять не понял... Receive(buf) все равно ведь надо дергать в цикле?


M>В цикле, НЕ ПОЕДАЮЩЕМ РЕСУРСЫ. Т.е. вызов Receive блокирует поток, пока не придут данные.

т.е., все тоже самое, только цикл не дергается понапрасну?
Re[2]: Listener без цикла?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 13.06.13 10:17
Оценка:
Здравствуйте, matumba, Вы писали:

M>Есть старый, добрый, блокирующий Read — как данные придут, ты об этом сразу узнаешь.


А что делать когда количество клиентов будет больше размера пула потоков?
... << RSDN@Home 1.2.0 alpha 5 rev. 99 on Windows 8 6.2.9200.0>>
AVK Blog
Re[2]: Listener без цикла?
От: mDmitriy Россия  
Дата: 13.06.13 10:21
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, mDmitriy, Вы писали:


D>>Вопрос: нет ли в NET готового сетевого слушателя, чтобы работал как Timer — создал, подписался на событие о поступлении инфы, подключился и счастлив?


AVK>System.Net.Sockets.TcpListener не подойдет?

А чем он лучше?
В примере, который приведен в MSDN, тот же цикл.
Re[3]: Listener без цикла?
От: mDmitriy Россия  
Дата: 13.06.13 10:25
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, matumba, Вы писали:


M>>Есть старый, добрый, блокирующий Read — как данные придут, ты об этом сразу узнаешь.


AVK>А что делать когда количество клиентов будет больше размера пула потоков?

Мой вопрос касался сугубо клиента. Для сервера цикл в потоке, по-моему, некритичен.
Re[3]: Listener без цикла?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 13.06.13 10:26
Оценка:
Здравствуйте, mDmitriy, Вы писали:

AVK>>System.Net.Sockets.TcpListener не подойдет?

D>А чем он лучше?

Больше сервисного функционала, чем у голого сокета. См., к примеру, AcceptTcpClient.

D>В примере, который приведен в MSDN, тот же цикл.


Это пример с синхронными методами. Опять же, тебе шашечки или ехать? Чтобы цикла не было, или чтобы удобно пользоваться было?
... << RSDN@Home 1.2.0 alpha 5 rev. 99 on Windows 8 6.2.9200.0>>
AVK Blog
Re[4]: Listener без цикла?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 13.06.13 10:27
Оценка:
Здравствуйте, mDmitriy, Вы писали:

D>Мой вопрос касался сугубо клиента.


Listener это у тебя клиент?
... << RSDN@Home 1.2.0 alpha 5 rev. 99 on Windows 8 6.2.9200.0>>
AVK Blog
Re[3]: Listener без цикла?
От: matumba  
Дата: 13.06.13 10:29
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>А что делать когда количество клиентов будет больше размера пула потоков?


Банально установить побольше "пул ожидающих соединения клиентов"!
Re[4]: Listener без цикла?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 13.06.13 10:32
Оценка:
Здравствуйте, matumba, Вы писали:

M>Банально установить побольше "пул ожидающих соединения клиентов"!


Ты так все сервера пишешь?
... << RSDN@Home 1.2.0 alpha 5 rev. 99 on Windows 8 6.2.9200.0>>
AVK Blog
Re: Listener без цикла?
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 13.06.13 10:48
Оценка: 2 (1)
Здравствуйте, mDmitriy, Вы писали:



D>Вопрос: нет ли в NET готового сетевого слушателя, чтобы работал как Timer — создал, подписался на событие о поступлении инфы, подключился и счастлив?


http://round-angle-net.blogspot.ru/2010/09/tcpip-c.html
Смотри ассинхронный BeginAccept
и солнце б утром не вставало, когда бы не было меня
Re[5]: Listener без цикла?
От: matumba  
Дата: 13.06.13 11:03
Оценка:
Здравствуйте, AndrewVK, Вы писали:

M>>Банально установить побольше "пул ожидающих соединения клиентов"!


AVK>Ты так все сервера пишешь?


Нет, только 37.81%; Есть какие-то возражения? Можно было бы вместо выпендрёжа сразу озвучить свою умную мысль, почему нельзя увеличивать очередь.
А, кажется догадался... ты хочешь открыть мне тайну о балансировке нагрузки?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.