Создаю Socket, подключаю его к удаленному серверу, создаю NetworkStream для этого сокета.
Далее в отдельном потоке в цикле проверяю оный NetworkStream, нельзя ли из него что-нибудь полезного от сервера прочесть.
Все работает...
Вопрос: нет ли в NET готового сетевого слушателя, чтобы работал как Timer — создал, подписался на событие о поступлении инфы, подключился и счастлив?
Здравствуйте, mDmitriy, Вы писали:
D>Доброго всем!
D>Создаю Socket, подключаю его к удаленному серверу, создаю NetworkStream для этого сокета. D>Далее в отдельном потоке в цикле проверяю оный NetworkStream, нельзя ли из него что-нибудь полезного от сервера прочесть. D>Все работает...
D>Вопрос: нет ли в NET готового сетевого слушателя, чтобы работал как Timer — создал, подписался на событие о поступлении инфы, подключился и счастлив?
D>Вопрос: нет ли в NET готового сетевого слушателя, чтобы работал как Timer — создал, подписался на событие о поступлении инфы, подключился и счастлив?
Здравствуйте, mDmitriy, Вы писали:
D>Вопрос: нет ли в NET готового сетевого слушателя, чтобы работал как Timer — создал, подписался на событие о поступлении инфы, подключился и счастлив?
Есть старый, добрый, блокирующий Read — как данные придут, ты об этом сразу узнаешь.
Здравствуйте, xednay89, Вы писали:
X>Здравствуйте, mDmitriy, Вы писали: D>>Вопрос: нет ли в NET готового сетевого слушателя, чтобы работал как Timer — создал, подписался на событие о поступлении инфы, подключился и счастлив? X>Создал, BeginReceive и счастлив
BeginReceive требует указания количества считываемых байт, а где их взять?
У меня считывается xml по jabber-протоколу через NetworkStream прямо в XMLReader. Все хорошо, если бы не цикл в потоке.
Здравствуйте, matumba, Вы писали:
M>Здравствуйте, mDmitriy, Вы писали:
D>>Вопрос: нет ли в NET готового сетевого слушателя, чтобы работал как Timer — создал, подписался на событие о поступлении инфы, подключился и счастлив?
M>Есть старый, добрый, блокирующий Read — как данные придут, ты об этом сразу узнаешь.
Подробнее можно, плиз?
Здравствуйте, 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) все равно ведь надо дергать в цикле?
Здравствуйте, mDmitriy, Вы писали:
D>Вопрос: нет ли в NET готового сетевого слушателя, чтобы работал как Timer — создал, подписался на событие о поступлении инфы, подключился и счастлив?
System.Net.Sockets.TcpListener не подойдет?
... << RSDN@Home 1.2.0 alpha 5 rev. 99 on Windows 8 6.2.9200.0>>
Здравствуйте, matumba, Вы писали:
M>Здравствуйте, mDmitriy, Вы писали:
D>>Опять не понял... Receive(buf) все равно ведь надо дергать в цикле?
M>В цикле, НЕ ПОЕДАЮЩЕМ РЕСУРСЫ. Т.е. вызов Receive блокирует поток, пока не придут данные.
т.е., все тоже самое, только цикл не дергается понапрасну?
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, mDmitriy, Вы писали:
D>>Вопрос: нет ли в NET готового сетевого слушателя, чтобы работал как Timer — создал, подписался на событие о поступлении инфы, подключился и счастлив?
AVK>System.Net.Sockets.TcpListener не подойдет?
А чем он лучше?
В примере, который приведен в MSDN, тот же цикл.
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, matumba, Вы писали:
M>>Есть старый, добрый, блокирующий Read — как данные придут, ты об этом сразу узнаешь.
AVK>А что делать когда количество клиентов будет больше размера пула потоков?
Мой вопрос касался сугубо клиента. Для сервера цикл в потоке, по-моему, некритичен.
D>Вопрос: нет ли в NET готового сетевого слушателя, чтобы работал как Timer — создал, подписался на событие о поступлении инфы, подключился и счастлив?
Здравствуйте, AndrewVK, Вы писали:
M>>Банально установить побольше "пул ожидающих соединения клиентов"!
AVK>Ты так все сервера пишешь?
Нет, только 37.81%; Есть какие-то возражения? Можно было бы вместо выпендрёжа сразу озвучить свою умную мысль, почему нельзя увеличивать очередь.
А, кажется догадался... ты хочешь открыть мне тайну о балансировке нагрузки?