написал я самый примитивный прокси сервер, используя классы TcpListener и TcpClient. В самой программе создал два потока. 1-й со стороны клиента, 2-й, соответственно, для работы с удаленным сервером. Вот кусочек кода:
TcpListener listener = new TcpListener(port_in);
listener.Start();
r_tb.AppendText("Жду входящего запроса на порт "+port_in.ToString() +" ..."+next_l);
TcpClient client = listener.AcceptTcpClient();
r_tb.AppendText(" принял запрос на коннект!"+next_l);
NetworkStream ns_cl = client.GetStream();
//--------------------------
TcpClient server = new TcpClient(tb_host_out.Text, port_out);
r_tb.AppendText("законнектились на удаленный хост "+tb_host_out.Text +" на порт "+port_out.ToString()+next_l);
NetworkStream ns_sr = server.GetStream();
r_tb.AppendText("начинаю работать ------------------------------"+next_l);
while(true)
{
if (ns_cl.DataAvailable)
{
//есть данные для чтения с клиента
kolwo_cl_read=ns_cl.Read(buff_cl,0,buff_cl.Length);
r_tb.AppendText("прочитал от клиента "+kolwo_cl_read.ToString()+" байт"+next_l);
ns_sr.Write(buff_cl,0,kolwo_cl_read);
};
if (ns_sr.DataAvailable)
{
//есть данные для отправки на клиента
kolwo_sr_read=ns_sr.Read(buff_sr,0,buff_sr.Length);
r_tb.AppendText("прочитал от сервера "+kolwo_sr_read.ToString()+" байт"+next_l);
ns_cl.Write(buff_sr,0,kolwo_sr_read);
};
};
как видно, сейчас в цикле просто тупо проверяется, есть ли данные в потоках, и, если есть, они с одного потока уходят в другой. В принципе все работает, но из-за непрерывного цикла приложение пожирает все процессорные ресурсы и само "не отвечает". собссно, вопрос:
как мне сделать, чтобы только при пришествии данных в поток, вызываласьь моя функция? может есть какое-нибудь событие, вызывающееся, когда приходят данные в поток?
зы: курил NetworkStream class, ничего не выглядел
зыы: курил фак этой ветки форума — вобще нихрена не понял