Re[3]: NetworkStream (TcpClient, TcpListener, C#)
От: Nickolay Ch  
Дата: 26.05.05 09:27
Оценка:
Здравствуйте, disuk, Вы писали:

D>Здравствуйте, Аноним, Вы писали:


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


D>>>написал я самый примитивный прокси сервер, используя классы TcpListener и TcpClient. В самой программе создал два потока. 1-й со стороны клиента, 2-й, соответственно, для работы с удаленным сервером. Вот кусочек кода:

D>>>как видно, сейчас в цикле просто тупо проверяется, есть ли данные в потоках, и, если есть, они с одного потока уходят в другой. В принципе все работает, но из-за непрерывного цикла приложение пожирает все процессорные ресурсы и само "не отвечает". собссно, вопрос:
D>>>как мне сделать, чтобы только при пришествии данных в поток, вызываласьь моя функция? может есть какое-нибудь событие, вызывающееся, когда приходят данные в поток?

А>>В данном случае корректней воспользоваться асинхронной моделью работы с потоком. См. NetworkStream.BeginRead(Write)

D>так. т.е. запихать в отдельную функцию один лишь вызов beginread со стороны потока клиента, в другую функцию поместить бегинРид со стороны сервера, эти функции тут же завершатся (ибо не будут ждать окончания работы beginread) и где-то создать свои коллбаки, которые будутт вызваться, когда функции beginread сработают?
D>т.е. тут даже с Thread не нужно ничего наворачивать?
Да, тред самому создавать не надо. Коллбек вызовется в новом треде из тредпула. Не забыть тока там(в коллбеке) после завершения операции опять начать следующую асинхронную операцию.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.