Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Прога My Proxy (https://forum.antichat.xyz/showthread.php?t=156246)

<Cyber-punk> 13.11.2009 15:56

Прога My Proxy
 
Программа запускающая прокси сервер на вашем компе.
Написана на Delphi 7.

Прога :
http://tortop.msk.ru./MyProxy.exe

Исходники :
http://tortop.msk.ru./myproxy.zip

slesh 13.11.2009 19:22

1) НА WinAPI смотрелось бы лучше. Чем на VCL
2) VCL тут реально лишнее. Потому как потоки можно и через CreateThread создавать
3) Если ошибка, то лучше выводи её в лог. (хотябы в мемо) а не сообщением. Потому как при глобальнмо сбое посыпится куча их
4) когда пробуеш получить HTTP заголовок то лучше ставь таймаут на Recv. Чтобы он не висел до посинения. также сразу получай длинну считанных данных чтобы не обрабатывать пустой буфер
5) бывают случае когда HTTP запрос больше килобайта. Или приходит в виде двух и более пакетов. ТАк что считывай в цикле до тех пор пока не будет crlf 2 раза
6) _request:=string(_buff); - ниесть гуд.
7) адрес сервака береш из Host - а он не всегда может быть заполнен.
Так что желательно данные брать из первой стоки (то что после GET/POST)
8) Error 400: Invalid header и тому подобные вешь - это не правильно.
лучше сразу по протоколу всё делай. типа
HTTP/1.0 400 Bad Request
HTTP/1.0 502 Bad Gateway
итд
9) когда создаеш сокет, то проверяй его на ошибку. бывают случае что сокет не создается
10)
Код:

//Соединение с сервером
 if connect(_srvSocket, _srvAddr, sizeof(_srvAddr))=SOCKET_ERROR then
  begin
  SendStr(_Client, '<h1>Error 404: NOT FOUND</h1>');
  exit;
  end;

А кто будет сокет закрывать клиента? и сокет для коннекта к серваку.
11)
Код:

//Если нам подсунули обычный ip, то просто преобразовывем
//его к нужному виду
 if name[4]='.' then
  _inAddr.s_addr := inet_addr(PChar(name))
 else

А если у меня адрес будет типа xx.xxx.xxx.xxx
То проверка обломается. Также обломается и имя типа
2ip.com

Так что просто делай inet_addr сразу
а потом смотри что она вернула. Если ошибку, то тогда резолвить
12)
Код:

procedure TClientThread.SendStr(s: TSocket; str: string);
var
 _buff: array [0..255] of char;
 _temp: AnsiString;
begin
//Добавляем символы конца строка
 _temp :=str+#13+#10;
//Заполняем _buff
 CopyMemory(@_buff, PChar(_temp), Length(_temp));
//отправляем серверу
 send(s, _buff, Length(_temp), 0);
end;

Это вообще ниесть гуд. Зачем ты копируеш? Лучше бы сразу слал строку.
примерно так: типа
send(s, _temp[1], length(_temp),0);

Более подробно влом смотреть. Но и этого ужа достаточно для проведения больших работ по исправлению итд итп. Ну а так можно поставить +1 за старанее

<Cyber-punk> 13.11.2009 19:58

Понял.Исправлю.


Время: 06:58