Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как разорвать соединение с сервером? Помогите дописать функцию... 
:(
    Опции темы
Pararam
Дата 20.5.2007, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 13.5.2007

Репутация: нет
Всего: нет



Уменя есть функция, нужно дописать её так - чтоб например при нажатии на кнопку функция соединялась с сервером, допустим прошло 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;


PM MAIL   Вверх
drkot
Дата 20.5.2007, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


Профиль
Группа: Завсегдатай
Сообщений: 1042
Регистрация: 5.5.2006

Репутация: 0
Всего: 8



Pararam, По твоему, что делает эта функция?


--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
Pararam
Дата 20.5.2007, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 13.5.2007

Репутация: нет
Всего: нет



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

Конектится на сервер с определённым логином и паролем если логин и пароль правельный она возврощяет True если логин и пароль не верный либо сервер недоступен она возвращяет False
PM MAIL   Вверх
drkot
Дата 20.5.2007, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


Профиль
Группа: Завсегдатай
Сообщений: 1042
Регистрация: 5.5.2006

Репутация: 0
Всего: 8



ну, а дальше?
точнее вот этот кусок.
Код

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

  InternetCloseHandle(hFTP);
  InternetCloseHandle(hNet);



--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
Pararam
Дата 20.5.2007, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 13.5.2007

Репутация: нет
Всего: нет



Код

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


Устроит такой ответ? Только я непойму, для чего спрашиваете?
PM MAIL   Вверх
drkot
Дата 20.5.2007, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


Профиль
Группа: Завсегдатай
Сообщений: 1042
Регистрация: 5.5.2006

Репутация: 0
Всего: 8



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

устроит


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

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

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

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


--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
Pararam
Дата 20.5.2007, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 13.5.2007

Репутация: нет
Всего: нет



Код

  { 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



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

>Заганяеш первую половину под кнопку и запускаеш таймер. По истечению таймера закрываеш дескрипторы.
Бес кнопки некак незя? Мне надо именно что бв процедуре это всё было организованно?!
PM MAIL   Вверх
hawkins
Дата 22.5.2007, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 8.9.2003

Репутация: нет
Всего: нет



InternetSetOption вызывай для установки таймаута. Тока она помоему в
асинхроне работает.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0935 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.