Форум: "Потрепаться";
Текущий архив: 2003.09.01;
Скачать: [xml.tar.bz2];
ВнизПишу прокси-сервер. Еще нужна Ваша помощь. Найти похожие ветки
← →
SergP (2003-08-13 14:06) [0]Так как старый топик уполз неизвестно куда при хакерской атаке, то создаю новый.
Вобщем спасибо nikkie и Poveli за помощь. Я пока написал вот такой код: (но он еще не работает нормально. Иногда подвисает браузер, иногда выскакивают ошибки связаные с сокетами). Может кто-то подскажет что я не так делаю?
Пока разбор запроса не писал для упрощения отладки, конектюсь через внешний прокси.
...
var
Form1: TForm1;
s,r:string;
s1,r1:boolean;
i:integer;
req:array[0..50] of string; // массив с запросами
CS:array[0..50] of TClientSocket;
implementation
{$R *.DFM}
// Создание клиентсого сокета в связи с новым запросом браузера
procedure TForm1.ServerSocketClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
j,handl:integer;
begin
memo1.lines.add("событие ClientRead Серверного сокета");
j:=0;
while assigned(CS[j]) do inc(j);
req[j]:=socket.ReceiveText; //сохранение данных запроса
handl:=socket.SocketHandle;
memo1.lines.add("хендл соединения "+inttostr(handl));
memo1.lines.add(s);
CS[j]:=TClientSocket.Create(self);
CS[j].Host:=Edit1.text;
CS[j].Port:=Strtoint(edit2.text);
CS[j].tag:=handl;
CS[j].OnWrite:=ClientSocketWrite;
CS[j].OnRead:=ClientSocketRead;
CS[j].ClientType:=ctNonBlocking;
CS[j].active:=true;
end;
procedure TForm1.ClientSocketConnecting(Sender: TObject;
Socket: TCustomWinSocket);
begin
memo1.Lines.add("Клиентский сокет сконектился");
end;
// Передача данных из клиентского сокета в серверный
procedure TForm1.ClientSocketRead(Sender: TObject;
Socket: TCustomWinSocket);
var
j,handl:integer;
begin
memo1.lines.add("событие OnRead клиентского сокета");
handl:=TClientSocket(Sender).Tag;
r:=socket.ReceiveText;
//memo1.lines.add(r);
memo1.Lines.add(inttostr(handl));
for j:=0 to serversocket.Socket.ActiveConnections-1 do
begin
if ServerSocket.Socket.Connections[j].SocketHandle=handl
then serversocket.socket.connections[j].sendtext(r);
end;
end;
// Запись из массива в клиентский сокет
procedure TForm1.ClientSocketWrite(Sender: TObject;
Socket: TCustomWinSocket);
var
j,handl:integer;
begin
handl:=TClientSocket(Sender).Tag;
for j:=0 to 50 do
if assigned(CS[j]) and (cs[j].tag=handl) then
begin
socket.SendText(req[j]);
end;
memo1.lines.add("событие OnWrite клиентского сокета");
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
serversocket.Active:=true;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
serversocket.Active:=false;
end;
// Уничтожение клиентского сокета
procedure TForm1.ServerSocketClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
var
j,handl:integer;
begin
handl:=socket.SocketHandle;
for j:=1 to 50 do
if assigned(CS[j]) and (CS[j].tag=handl) then
begin
CS[j].active:=false;
CS[j].Free;
cs[j]:=nil;
end;
end;
end.
← →
Gigabyte (2003-08-13 20:48) [1]Воспользуйса Indy - idMappedPortTCP или зайди на мой сайт там уже одна выложена
← →
SergP (2003-08-13 22:07) [2]
> Gigabyte © (13.08.03 20:48) [1]
> Воспользуйса Indy - idMappedPortTCP
Ну даже не знаю. Если я им воспользуюсь, смогу ли редактировать запросы браузера и данные, которые будут передаваться обратно?
> или зайди на мой сайт
> там уже одна выложена
Зашел, нашел, скачал. Но она на Delphi6 написана, а у меня щас Delphi5, да и экзешник не хочет работать, какую-то библиотеку просит. Ну с ним я позже буду разбираться - на работе, там у меня стоит D6 а то дома не хочется ставить D6 (вернее не могу. CD-ROM накрылся).
← →
имя (2003-08-13 22:12) [3]Удалено модератором
← →
имя (2003-08-13 22:12) [4]Удалено модератором
← →
имя (2003-08-13 22:12) [5]Удалено модератором
← →
имя (2003-08-13 22:12) [6]Удалено модератором
← →
имя (2003-08-13 22:13) [7]Удалено модератором
← →
имя (2003-08-13 22:13) [8]Удалено модератором
← →
имя (2003-08-13 22:13) [9]Удалено модератором
← →
имя (2003-08-13 22:13) [10]Удалено модератором
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2003.09.01;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.187 c