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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите с Thread, Работа с потоками...... 
:(
    Опции темы
Pararam
Дата 13.5.2007, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Помоги разобратся, вот в таком коде!
function FtpChk не всегда возврощяет правельное значение! В чём причина?!
На самом деле к серверу можно приконектится, а функция возврощяет False!
Подстовляем в функцию host,login,password

Бес TThread функция работает нормально! Некаких ложных False не выдаёт!


Код

unit Unit1;

delete



Это сообщение отредактировал(а) Pararam - 18.12.2007, 00:16
PM MAIL   Вверх
Pararam
Дата 13.5.2007, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Некто не поможет?! smile 
PM MAIL   Вверх
Matematik
Дата 14.5.2007, 01:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



1. НЕЛЬЗЯ ОБРАЩАТЬСЯ К VCL в контексте доп потока, только через синхронизацию
подробнее см. http://forum.vingrad.ru/forum/topic-60076.html и демо из папки  Threads
2. у меня прекрасно работает.
может инет соединение плохое, может сервер глючный, мож кол-во одновременных соединений малое
Вообще см. сообщение об ошибке самого wininet

Цитата

To retrieve extended error information, call GetLastError. An application can also use InternetGetLastResponseInfo to determine why access to the service was denied.

PM MAIL WWW ICQ   Вверх
Pararam
Дата 14.5.2007, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Matematik

Спасибо за информацию.... но вы бы немогли показать на примере моего кода.....
Как мне из Edit1.text,Edit2.text,Edit3.text взять текст при помощи функции синхронизации и втавить в 
эту процедуру!? (FtpChk)

if FtpChk(Edit1.text,Edit2.text,Edit3.text,21)=True then Check:=True else Check:=False;

В описании есть как из потока оброщятся к форме и компонентам.......а наоборот? Внести данные в поток.....

За ранее спасибо......

Это сообщение отредактировал(а) Pararam - 14.5.2007, 16:32
PM MAIL   Вверх
Pararam
Дата 14.5.2007, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Получил вот такой код!!!!
Что я делаю не правельно?!
Нет, от скорости интернета не зависит.....
Уменя АДСЛ!
Уменя то-жне прекрасно работает.....
Но я же сказал - что на некоторых серверах выдаёт False хотя логин, пароль и хость введён правельный!
Когда проверяю вот так: 
if FtpChk('127.0.0.1','user','user',21)=True then Check:=True else Check:=False;
Функция возврощяет на этот сервер True и через ФТП клиент можно зайти на него....
А если через тот код который ниже.... тогда высвечивается False!
Уже ненаю что делать.......
Пробовал со стандартным компонентом...
idFTP..... то-же самое получается!

Код

unit Unit1;

interface
uses
  Classes,WinInet;

       TMyThread=class(TThread)
    private

    protected
    procedure Execute; override;
    public
      loginTT,passwordTT,hostTT: string;
      pTT: integer;
      procedure SyncData;
      Procedure CheckProxy(NumChecked: Integer);
      Function  FtpChk(strHost, strUser, strPwd: string;Port: Integer): Boolean;

  end;

implementation

delete



Это сообщение отредактировал(а) Pararam - 18.12.2007, 00:17
PM MAIL   Вверх
Matematik
Дата 14.5.2007, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Данные надо передавать потоку при его создании.
Примерно так, писал "на коленке"
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, WinInet;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

type
  TMyThread = class(TThread)
  private
    FStr : String;
    fHost : String;
    FPort:Word;
    FUser,FPassword:String;
    { Private declarations }
  protected
    procedure ShowLog(const aStr:String);
    procedure DoShowLog;
    procedure OnTheradTerminate(Sender: TObject);
    constructor Create(aHost:String;aPort:Word;aUser,aPassword:String);
    procedure Execute; override;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TMyThread }

constructor TMyThread.Create(aHost: String; aPort: Word; aUser,
  aPassword: String);
begin
  inherited Create(True);
  OnTerminate := OnTheradTerminate;
  fHost     := aHost;
  FPort     := aPort;
  FUser     := auser;
  FPassword := aPassword;
end;


procedure TMyThread.DoShowLog;
begin
  Form1.Memo1.Lines.Add(fStr)
end;

function FtpChk(strHost, strUser, strPwd: string;Port: Integer; var errStr:String): Boolean;
var
  hNet, hFTP: HINTERNET;
  e,i:cardinal;
  buf:Array[1..1024] of Char;
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
    errStr := 'Unable to get access to WinInet.Dll - '+SysErrorMessage(GetLastError);
    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
    errStr := SysErrorMessage(GetLastError);
    i := SizeOf(buf);
    if InternetGetLastResponseInfo(e, @buf[1], i) then
      errStr := errStr+' - #'+IntToStr(e)+' - '+buf;
    Result:= False;
    InternetCloseHandle(hNet);
    Exit;
  end;
  InternetCloseHandle(hFTP);
  InternetCloseHandle(hNet);
end;

procedure TMyThread.Execute;
var er:String;
begin
  while Not terminated do
    if FtpChk(fHost, fuser, fPassword, fport, er) then
      ShowLog('OK')
    else
    ShowLog('False - '+er)
end;

procedure TMyThread.OnTheradTerminate(Sender: TObject);
begin
  if FatalException<>nil then
    Application.ShowException(Exception(FatalException));
  ShowMessage('поток завершен');
end;

procedure TMyThread.ShowLog(const aStr: String);
begin
  fStr := aStr;
  Synchronize(DoShowLog);
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  with TMyThread.Create(edit1.text, Strtoint(edit2.text), edit3.text, edit4.text) do
    Resume;
end;

end.


В прикрепленом файле проект (переименовать в *.zip)


Присоединённый файл ( Кол-во скачиваний: 26 )
Присоединённый файл  ftp_test.zip.txt 2,21 Kb
PM MAIL WWW ICQ   Вверх
Pararam
Дата 14.5.2007, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Matematik, огромное спасибо......
Ваш пример мне очень помог.....
Я бы поставил + (мой ранг маловат)
PM MAIL   Вверх
Pararam
  Дата 14.5.2007, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Урааааа... заработало.....
Огромное спасибо......


Разобрался.....

Это сообщение отредактировал(а) Pararam - 14.5.2007, 20:07
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

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

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

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

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

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


 




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


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

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