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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Консольный телнет клиент, очень нужен 
:(
    Опции темы
Snowy
Дата 14.1.2005, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Нужно сделать консольный телнет клиент.
Для начала хотя бы копию WinNT+
Может у кого есть готовый, или хотя бы идеи как его делать.
т.к. консоль, то естественно нет никакого Forms. А без формзов у меня затыка с использованием Indy.
Как правильно передать индюкам управление и рулить евентами?
PM MAIL   Вверх
_hunter
Дата 14.1.2005, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



создай класс ( любой ) и назанач функции этого класса в обработчики инди


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Snowy
Дата 14.1.2005, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Это понятно, речь о другом: как мне заставить инди работать?
Допустим, я даю комманду Connect. О том, что коннект прошел корректно, я узнаю по событию OnConnect. Но, если у меня нет Application, то кто будет рулить евентами? Инди сама отказывается. Значит нужно это писать ручками. Как это сделать правильно?
Инди сделает коннект и отдаст управление дальше мне. т.к. приожение консольное, то модель приложения не событийная, а линейная. Как мне, оставляя приложение консольным, реализовать событийную модель???
PM MAIL   Вверх
_hunter
Дата 14.1.2005, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



какая разница кто событиями рулит? ты, как я сказал, делать пробовал?


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Snowy
Дата 14.1.2005, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Именно так я и пробовал делать. Даже не пробовал, а именно так и сделал - не работает. Поэтому и задал вопрос. Очевидно, что инди сама евенты не обслуживает, поскольку ей никто не сообщает о событиях. Если программа линейна, то я сам должен говорить, куда передать управление. Значит я сам должен ловить сообщения винды и решать, что с ними делать. Инди за меня тут не решит. Пока я ручками не передам ей управление, инди ничего не сделает и её евенты не работают.
Вот меня и интересует, как мне так по хитрому раздавать сообщения виндов, чтобы инди работало? Или проще воспольсоваться чем-нибудь, чтобы работало синхронно: врыйт в сокет, рид из сокета, а не мучаться с инди...
Хоть кто-нить вообще видел консольный телнет клиент на дельфи?
PM MAIL   Вверх
_hunter
Дата 14.1.2005, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



я, может, чего не понимаю, но такой:
Код
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include <IdBaseComponent.hpp>
#include <IdComponent.hpp>
#include <IdHTTP.hpp>
#include <IdTCPClient.hpp>
#include <IdTCPConnection.hpp>

//---------------------------------------------------------------------------

class Test
{
public:
   void __fastcall Indy_OnWorkBegin(TObject *Sender, TWorkMode AWorkMode, const int AWorkCountMax);
   Test();
};

Test::Test()
{
}

void __fastcall Test::Indy_OnWorkBegin(TObject *Sender, TWorkMode AWorkMode, const int AWorkCountMax)
{
   bool stop = true;
}


#pragma argsused
int main(int argc, char* argv[])
{
   Test *test = new Test();

   TIdHTTP *http = new TIdHTTP(NULL);
     http->OnWorkBegin = test->Indy_OnWorkBegin;
   http->Get("http://www.microsoft.com:80/");
   return 0;
}
//---------------------------------------------------------------------------


код работает просто отлично ( извеняюсь за язык, но все должно быть понятно )


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
<Spawn>
Дата 16.1.2005, 06:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



Snowy Выполняй всю работу в отдельном потоке. У меня сейчас так FTP клиент мой работает - потоку передается команда, он ее выполняет и переходит в режим ожидания(Susped) до следующей команды.

Это сообщение отредактировал(а) <Spawn> - 16.1.2005, 06:34


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Snowy
Дата 17.1.2005, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



У меня сейчас делается так (упрощенный вариант):
Код

uses   Windows,  IdTelnet;

type
 TTelnet=class(TIdTelnet)
     connected: boolean;
     constructor Create(Server:string; Port:integer);overload;
     procedure  ConnOk(Sender: TObject);
 end;

procedure TTelnet.ConnOk(Sender: TObject);
begin connected:=true; end;

constructor TTelnet.Create(Server:string; Port:integer);
begin
 inherited Create(nil);
 Host:=Server;
 self.Port:=Port;
 connected:=false;
 OnConnect:=ConnOk;
end;

var
 T: TTelnet;

BEGIN
 T:=TTelnet.Create('127.0.0.1',23);
 T.Connect(-1);
 while not T.connected do;
 WriteLn('Connected');
 T.Disconnect;  T.Free;  
 ReadLn;
END.


Хрень какая-то... Ведь не работало... А теперь работает... Непонятно.
Ладно. Буду ковырять дальше.
Добавлено @ 12:12
to Spawn:
А зачем телнету отдельный поток?
У него же принцип действия: отправил-получил. Асинхронность не нужна. Телнет вообще посимвольно работает. Нет смысла посылать комманды раньше, чем закончен вывод ответа.
Или может я чего не понимаю...
PM MAIL   Вверх
_hunter
Дата 17.1.2005, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



не могло оно не работать smile ( явно что-то где-то пропустил )


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

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

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

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

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

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


 




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


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

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