Здравствуйте, у меня есть готовый пример для отправки СМС через маил ру агент взятый отсюда, на основе компонента от BOBAH13. С кодом все вроде понятно, но есть одна проблема, никак не могу впихнуть прокси. Нужно чтото дописать в компоненте от BOBAH13, но я уже неделю пытаюсь это сделать, и ничего не получается, подскажите как можно такое осуществить.
В файле client.pas есть клас TClientSocket, который используется в основном компоненте. Тебе нужно должным образом изменить метод DoConnect класа TClientSocket, чтобы реализовать поддержку прокси. О работе с Socks 4/5 прокси можешь найти информацию в поисковике.
Очень поверхносто смотрел... Код, который нужно подредактировать находится в методе Execute, а DoConnect может вызывать пользовательскую функции после успешного коннекта.
Чет вообще не могу разобратся =((( PHP: procedure TClientSocket.Execute; var addr: sockaddr_in; FDSet: TFDSet; TimeVal: TTimeVal; Len: Integer; begin FLastError:= NotError; FSocket:= winsock.socket(AF_INET, SOCK_STREAM, IPPROTO_IP); if FSocket = INVALID_SOCKET then begin FLastError:= NotCreateSocket; Synchronize(DoError); Free; Exit; end; ZeroMemory(@addr, SizeOf(sockaddr_in)); addr.sin_family:= AF_INET; addr.sin_port:= htons(FPort); addr.sin_addr.S_addr:= inet_addr(PCHAR(FHost)); if winsock.connect(FSocket, addr, SIZEOF(sockaddr_in)) = SOCKET_ERROR then begin closesocket(FSocket); FLastError:= NotConnect; Synchronize(DoError); Free; Exit; end; Synchronize(DoConnect); while not Terminated and (FSocket <> INVALID_SOCKET) do begin FD_ZERO(FDSet); FD_SET(FSocket, FDSet); TimeVal.tv_sec:= 0; TimeVal.tv_usec:= 500; if (select(0, @FDSet, nil, nil, @TimeVal) > 0) and not Terminated then begin ioctlsocket(FSocket, FIONREAD, Len); if Len = 0 then Break else Synchronize(DoRead); end; end; Free; end;
В первой части кода не нужно никаких изменений... Во второй: подключаешься с помощью winsock.connect к прокси серверу, формируешь пакеты для отправки в зависимости от того, с каким прокси сервером ты работаешь (Socks 4/5) и отправляешь их. Больше никаких исправлений не потребуется.
менять здесь надо? begin ioctlsocket(FSocket, FIONREAD, Len); я правильно ж понимаю? Что для закрепления сетевого программирования на делфе почитать порекомендуешь?
Если именно сокеты то, "Игры на сокетах", http://forum.antichat.ru/thread123692-%D1%EE%EA%E5%F2%FB+Delphi.html