Создал Tcplistener на порт 8888(в браузере в настройках прокси-сервера указал тоже самое).
Дальше делал цикл, получал от Tcplstener`a socket и создавал поток для обработки.
Обрабатывал так: получал массив байтов от сокета, создавал tcpclient(порт 80) и в его поток записывал массив байтов, затем читал этот поток, получал новый массив байтов и отправлял его обратно в сокет.
Вот код. Он на managed c++, потому, что visual basic у меня сломался после апргрейда системы с висты на 7.
вот цикл.
- Код: Выделить всё
TcpListener^ proxy = gcnew TcpListener(8888);
proxy->Start();
while(true)
{
Socket^s = proxy->AcceptSocket();
proc^ prc = gcnew proc;
prc->s = s;
Threading::ThreadStart^start = gcnew Threading::ThreadStart(prc,&proc::process);
Threading::Thread^ thrd = gcnew Threading::Thread(start);
thrd->Start ();
}
вот обработка
- Код: Выделить всё
ref class proc
{
public:
Socket^s;
void process()
{
array<Byte>^ buf = gcnew array<Byte>(8192);
int bytes = s->Receive(buf,buf->Length,(SocketFlags)0);
String^ str= Encoding::ASCII->GetString(buf); //весь запрос от браузера
String^ url = "";
int n1 = str->IndexOf(L" "),n2 = str->IndexOf(L" ",n1+1);
url = str->Substring(n1+1,n2-n1-1);
url = url->Substring(7,url->IndexOf("/",8)-7);//вырезаем из него адрес узла (было http://www.google.ru/ стало www.google.ru)
TcpClient^cli = gcnew TcpClient(url,80);//клиент
cli->GetStream()->Write(buf,0,buf->Length);//отправка
cli->GetStream()->Read(buf,0,buf->Length);//получение ответа
s->Send(buf,buf->Length,(SocketFlags)0);//перенаправка к браузеру
str= Encoding::ASCII->GetString(buf);//это просто так
Console::WriteLine("Complete!");
s->Close();
}
};
Подскажите, в чём ошибка.(с горем пополам грузит google и на этом всё).