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


Автор: ruuit 4.6.2009, 18:51
Нужно подключиться к серверу через прокси.
Вот, что написал(в соотв. с RFC) :
Код

var
  wData: WSAData;
  S: TSocket;
  addr: sockaddr_in;
  SendBuff: String;
  buff: array[1..1024] of char;
  proxy_port, proxy_host, host: string;
begin
  Proxy_host:='127.0.0.1';
  Proxy_port:=1080;
  Host:='site.com';
  If WSAStartUp($0101, wData) <> 0 then
  begin
    MessageDLG('winsock library not found.',mtError,[mbOK],0);
    exit;
  end;
  s:= Socket(AF_INET, Sock_STREAM, ipPROTO_TCP);
  If S = Invalid_Socket then begin
    ShowMessage('socket error#'+IntToStr(WSAGetLastError));
    CloseSocket(s);
    Exit;
  end;
  FillChar(addr, sizeOF(sockaddr_in),0);
  Addr.sin_family:=af_INET;
  Addr.sin_port:=hTons(Proxy_port);
  Addr.sin_addr.S_addr:=Inet_ADDR(Proxy_host);
  Connect(s, addr, SizeOf(TSockAddr));
  SendBuff:=#5#1#0;
  send(s, SendBuff[1], 3, 0);
  recv(s, buff, 2, 0);
  If (buff[1] <> #5) or (buff[2] <> #0) then begin
    ShowMessage('Connect error!');
    exit;
  end;
  SendBuff:=#5#1#0#3+chr(length(host))+host+chr(proxy_port div 256)+
    char(proxy_port mod 256);
  send(s, SendBuff[1], Length(SendBuff), 0);
  recv(s, buff, SizeOf(Buff), 0);
  if (buff[1] <> #5) or (buff[2] <> #0) then
    Memo1.Text:='connect!' 
  else
      Memo1.Text:='failed!';
  CloseSocket(s);
  ShutDown(s, SD_BOTH);
  WSACleanUp;

Но всё запарывается уже на первом пункте. Если кто знает где ошибка, помогите пожалуйста.

Автор: dvamaster 9.6.2009, 10:33
Какая Delphi?

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