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


Автор: Pararam 20.5.2007, 17:08
Уменя есть функция, нужно дописать её так - чтоб например при нажатии на кнопку функция соединялась с сервером, допустим прошло 10 секунд а сервер не разрывает соединение то соединение должно разорватся автоматически!

Как это сделать?
Вот функция........

Код

function Connect(strHost, strUser, strPwd: string;Port: Integer): Boolean;
var
  hNet, hFTP: HINTERNET;
begin

  Result := True;

  { Open an internet session }
  hNet := InternetOpen('MSIE 6.0', // Agent
                        INTERNET_OPEN_TYPE_PRECONFIG, // AccessType  INTERNET_OPEN_TYPE_DIRECT /INTERNET_OPEN_TYPE_PRECONFIG
                        nil,  // ProxyName
                        nil, // ProxyBypass
                        0); // or INTERNET_FLAG_ASYNC / INTERNET_FLAG_OFFLINE


  if hNet = nil then
  begin
    ShowMessage('Unable to get access to WinInet.Dll');
    Result:= False;
    Exit;
  end;

  { Connect to the FTP Server }
  hFTP := InternetConnect(hNet, // Handle from InternetOpen
                          PChar(strHost), // FTP server
                          port, // (INTERNET_DEFAULT_FTP_PORT),
                          PChar(StrUser), // username
                          PChar(strPwd),  // password
                          INTERNET_SERVICE_FTP, // FTP, HTTP, or Gopher?
                          0, // flag: 0 or INTERNET_FLAG_PASSIVE
                          0);// User defined number for callback

  if hFTP = nil then
  begin
    Result:= False;
    InternetCloseHandle(hNet);
    Exit;
  end;

  InternetCloseHandle(hFTP);
  InternetCloseHandle(hNet);

end;


Автор: drkot 20.5.2007, 17:52
Pararam, По твоему, что делает эта функция?

Автор: Pararam 20.5.2007, 18:01
Цитата(drkot @ 20.5.2007,  17:52)
Pararam, По твоему, что делает эта функция?

Конектится на сервер с определённым логином и паролем если логин и пароль правельный она возврощяет True если логин и пароль не верный либо сервер недоступен она возвращяет False

Автор: drkot 20.5.2007, 18:03
ну, а дальше?
точнее вот этот кусок.
Код

 if hFTP = nil then
  begin
    Result:= False;
    InternetCloseHandle(hNet);
    Exit;
  end;

  InternetCloseHandle(hFTP);
  InternetCloseHandle(hNet);

Автор: Pararam 20.5.2007, 18:16
Код

 if hFTP = nil then // если hFTP равняется nil тогда присваевается значение Result:= False, разрывается соединение и выход из функции 
  begin
    Result:= False;
    InternetCloseHandle(hNet); //Закрыли интернет сессию hNet
    Exit; //Выход из функции.....
  end;
//до этих двух опций дойдёт если логин, пароль будут правельны и сервер будет доступен! 
  InternetCloseHandle(hFTP);  //Закрыли интернет сессию hFTP
  InternetCloseHandle(hNet);  //Закрыли интернет сессию hNet
 


Устроит такой ответ? Только я непойму, для чего спрашиваете?

Автор: drkot 20.5.2007, 18:33
Цитата(Pararam @  20.5.2007,  18:16 Найти цитируемый пост)
Устроит такой ответ?

устроит


Цитата(Pararam @  20.5.2007,  18:16 Найти цитируемый пост)
Только я непойму, для чего спрашиваете?

Мне нужно было знать насколько ты понимаеш код.

Заганяеш первую половину под кнопку и запускаеш таймер. По истечению таймера закрываеш дескрипторы.

Хотя я так и не понимаю в чем поблемма, ведь соединение закрывается в любом случае.

Автор: Pararam 20.5.2007, 18:44
Код

  { Open an internet session }
  hNet := InternetOpen('MSIE 6.0', // Agent
                        INTERNET_OPEN_TYPE_PRECONFIG, // AccessType  INTERNET_OPEN_TYPE_DIRECT /INTERNET_OPEN_TYPE_PRECONFIG
                        PChar('socks=127.0.0.1:1021'),  // ProxyName
                        nil, // ProxyBypass
                        0); // or INTERNET_FLAG_ASYNC / INTERNET_FLAG_OFFLINE



Использую соединени через сокс....
Бывает что соединение зависает.....
Не закрывается... потому что сокс сервер держит соединение.... и нужно чтоб тайм прощёл и автаматически закрылось соединение.....
Пожалуйсто напишите по конкретнее пример?!

>Заганяеш первую половину под кнопку и запускаеш таймер. По истечению таймера закрываеш дескрипторы.
Бес кнопки некак незя? Мне надо именно что бв процедуре это всё было организованно?!

Автор: hawkins 22.5.2007, 16:16
InternetSetOption вызывай для установки таймаута. Тока она помоему в
асинхроне работает.

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