Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Как подключить TIdTCPClient чарез прокси-сервер


Автор: dx22 4.5.2008, 19:47
Как можно организовать работу TIdTCPClient (indy 10) через прокси-сервер? (Клиент<->Прокси-сервер<->Сервер-приложение).



Автор: SneG0K 4.5.2008, 22:56
Эээ... Да просто подключайся к прокси, а не к серверу... И уже на основе прокси передавай команды...

Автор: dx22 5.5.2008, 14:08
TIdTCPClient <-TIdIOHandlerSocket <-TIdSocksInfo

пробовал в indy9   TIdSocksInfo настраивал на прокси, а в TIdTCPClient  указывал внешний ip и port  сервера. не хочет соединяться ошибка 10061 в доступе отказано, Через IE на тойже машине все нормально работает, через тот же прокси. В чем может проблема быть?

Автор: SneG0K 5.5.2008, 14:13
Да ну сказал уже, что соединяйся напрямую с проксиком! 

Автор: Sanchezzz 5.5.2008, 19:40
ошибка 10061 это ошибка то что он его не находит.
1 кидаешь на форму клиент сокет далее IdIOHandlerStack
2 кидаешь на форму IdSocksInfo вбиваешь все поля. обязательно укажи версию сокета 5. 
--
точно такжеи для http IdConnectThroughHttpProxy + свойство Enable:=true;

Совет дня!!!
Создавай сокеты динамически и подставляй меньше глюков будет... 

---
таких например как зацепился потом связь оборвалась и потом не можешь зацепится иза того что сокет не освободился пока дождешься минут 5 проходит а так сокет сразу убиваешь и его можно опять использовать... 

Автор: dx22 6.5.2008, 14:23
всем спасибо,разобрался, усё вроде заработало.

для indy 10.1.5 использовал
TIdTCPClient.IOHandler <- IdIOHandlerStack1.TransparentProxy <- TIdSocksInfo

Автор: alexstep 4.3.2011, 02:17
Разобрался с этой темой.
Написал инструкцию (Indy 10) для подключения прокси. 
Компоненты создаю динамически:

  //Create proxy object(HTTP/Socks) and init it's parameters
  //For UDP
    //Proxy.Enabled := True;
    //UDPClient.TransparentProxy := Proxy;
  //For TCP: Create IdIOHandlerStack
    //Assign IdIOHandlerStack.TransparentProxy = Proxy;
    //!!! Only now set to Enabled!!! It's reseted when TransparentProxy is assigned
    //Set IdIOHandlerStack.TransparentProxy.Enabled := True;
    //Set IdTCPClient.IOHandler := IdIOHandlerStack;

Код

///////////////
//UDP Sample:
///////////////
  UDPClient := TIdUDPClient.Create(nil);
  UDPClient.Host := FIp;
  UDPClient.Port := FPort;
  UDPClient.ReceiveTimeout := constReceiveTimeOut;
  
  SocksProxy := TIdSocksInfo.Create(nil);
  SocksProxy.Version := svSocks5;
  SocksProxy.Host := Proxy.Host;
  SocksProxy.Port := Proxy.Port;
  SocksProxy.Enabled := True;

  UDPClient.TransparentProxy := SocksProxy;
//---------


///////////////
//TCP Sample:
///////////////
  TCPClient := TIdTCPClient.Create(nil);
  TCPClient.Host := FIp;
  TCPClient.Port := FPort;
  TCPClient.ConnectTimeout := constReceiveTimeOut;
  TCPClient.ReadTimeout := constReceiveTimeOut;

  IdIOHandlerStack := TIdIOHandlerStack.Create(nil);
  
  HttpProxy := TIdConnectThroughHttpProxy.Create(nil);
  SocksProxy := TIdSocksInfo.Create(nil);

  HttpProxy.Host := Proxy.Host;
  HttpProxy.Port := Proxy.Port;

  SocksProxy.Version := svSocks5;
  SocksProxy.Host := Proxy.Host;
  SocksProxy.Port := Proxy.Port;

  IdIOHandlerStack.TransparentProxy := HttpProxy;
  //or
  //IdIOHandlerStack.TransparentProxy := SocksProxy;

  IdIOHandlerStack.TransparentProxy.Enabled := True;

  TCPCLient.IOHandler := IdIOHandlerStack;
//---------

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)