Здравствуйте, Svjat, Вы писали:
S>Здравствуйте, Tanketka, Вы писали:
T>>Только теперь это нужно сделать на C#, и многопоточной,
S>S>class Proxy
S>{
S> private Socket ListenerSocket;
S> List<ProxySession> Session = new List<ProxySession>();
S> public void Start( IPAddress ip, int port )
S> {
S> Socket ListenerSocket = new Socket();
S> ListenerSocket.Bind( new IPEndPoint( ip, port ) );
S> ListenerSocket.Listen();
S> ListenerSocket.BeginAccept( OnAccept );
S> }
S> private void OnAccept( IAsyncResult ar )
S> {
S> // создаем новую сессию на входящее соединение от браузера
S> ProxySession session = new ProxySession( ListenerSocket.EndAccept( ar ) );
S> // подписываемся на события
S> //session.OnClosed += OnSessionClosed;
S> //......
S> Session.Add( session );
S> session.Start();
S> }
S>}
S>class ProxySession
S>{
S> Socket ClientSocket;
S> Dictionnary<string,Socket> ServerSocket = new Dictionnary<string,Socket>();
S> public ProxySession( Socket socket ) { ClientSocket = socket; }
S> public void Start() { ClientSocket.BeginReceive( ...., OnReceive ); }
S> private void OnReceive( IAsynchResult ar )
S> {
S> try
S> {
S> ClientSocket.EndReceive( ar );
S> }
S> catch( SocketException )
S> {
S> // инициатором закрытия сессии может быть только клентсое соединение
S> // точнее, его разрыв
S> CloseSession();
S> return;
S> }
S> ......
S> // тут смотрим запрос от браузера, вытаскиваем хост, на кот. идет запрос
S> // и если у нас нет такого в списке подключенных, то
S> // создаем соотв. новое подключение к веб-серверу
S> // причем это нужно делать при каждом запросе от клиента
S> // т.е. в рамках одной сессии может быть один конект от клиента,
S> // и много подключений к веб-серверам
S> Socket server = null;
S> if( !ServerSocket.TryGetValue( hostName, out server ) )
S> {
S> server = new Socket( ... );
S> ServerSocket.Add( hostName, server );
S> }
S> server.BeginSend( ..... );
S> ClientSocket.BeginReceive( ...., OnReceive );
S> }
S>}
S>
Все вроде сделала, только в OnAccept вываливается исключение:
Object reference not set to instance...