Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2003.10.13;
Скачать: [xml.tar.bz2];

Вниз

TIDTelnetServer   Найти похожие ветки 

 
alt7   (2003-08-13 11:35) [0]

Добрый день всезнающий народ...
Не подскажите, как сделать, чтоб сабж откликался на команды (а то я сходу не нашел)

То есть, я к примеру пишу ему LAST (в клиенте), а он мне передает последние данные?


 
Reindeer Moss Eater   (2003-08-13 12:01) [1]

Напиши реализацию команд и это будет.


 
alt7   (2003-08-13 12:12) [2]

procedure IdTelnetSrvConnect(AThread: TIdPeerThread);
procedure IdTelnetSrvDisconnect(AThread: TIdPeerThread);
procedure IdTelnetSrvException(AThread: TIdPeerThread; AException: Exception);
procedure IdTelnetSrvExecute(AThread: TIdPeerThread);
procedure IdTelnetSrvAuthentication(AThread: TIdPeerThread;
const AUsername, APassword: String; var AAuthenticated: Boolean);

Вот такие процедуры есть у меня.
В последних двух я отсылаю данные клиенту. Штука в том, что клиент подключается и постоянно получает данные, то есть НИКАКИХ СТРОК он серверу не отсылает (имя и пароль не считаются)...
а теперь надо, чтоб клиент мог отправить команду LAST. В какой обработчик события надо поставить обработку эту.. и примерно как сделать-то?


 
Reindeer Moss Eater   (2003-08-13 12:15) [3]

Если есть CommandHandlers, то их OnCommand + OnNoCommandHandler;
Если нет, то OnExecute


 
alt7   (2003-08-13 15:10) [4]

Гм, странная ситуевина получается: если я нажму ченить от клиента, тогда строки идут с сервера, иначе нет, то есть обработка застряет на первом куске... можно это как-то обойти?

Первый кусок:
if AThread.Connection.CurrentReadBuffer <> "" then
begin
gl_frcl := gl_frcl + AThread.Connection.CurrentReadBuffer;
if pos("ATAT",gl_frcl) <> 0 then
begin
Writeln("LAST granted");
gl_frcl := "";
AThread.Connection.InputBuffer.Clear;
with AThread.Connection do
begin
WriteLn("LT"+" "+arrS_last2[1]);
WriteLn("LT"+" "+arrS_last2[2]);
WriteLn("LT"+" "+arrS_last2[3]);
WriteLn("LT"+" "+arrS_last2[4]);
WriteLn("LT"+" "+arrS_last2[5]);
WriteLn("LT"+" "+arrS_last2[6]);
WriteLn("LT"+" "+arrS_last2[7]);
WriteLn("LT"+" "+arrS_last2[8]);
end;
end;
end;

Второй кусок, отправление ДРУГИХ данных клиенту <skipped>


 
Reindeer Moss Eater   (2003-08-13 15:18) [5]

begin
cCommand:=AThread.Connection.ReadLn;

end;


 
alt7   (2003-08-13 15:23) [6]

и что? по умолчанию стоит время infinite, и из этой строки уже не выходит... я ставил 1сек., но почему-то все равно не выходит


 
Reindeer Moss Eater   (2003-08-13 15:41) [7]

При чем здесь таймаут?

и из этой строки уже не выходит

А клиент что-нибудь вводит и завершает это оганичителем?


 
alt7   (2003-08-13 15:48) [8]

клиент же не постоянно вводить что-то должен...
то есть, если в буфере ничего нет, то этот кусок не должен обрабатываться...
а если ввел то смотрим что ввел, если правильно то высылка данных
в нажатием ENTER клиента чето пока непонятно тоже. как отловить что юзер enter нажал?


 
Reindeer Moss Eater   (2003-08-13 15:53) [9]

клиент же не постоянно вводить что-то должен...
Согласен.
А зачем при этом возвращаться из AThread.Connection.ReadLn?
Можешь объяснить?


 
alt7   (2003-08-13 15:58) [10]

дык возращаться надо чтобы отправить клиенту текущую порцию инфо... а иначе ж ему ничего не отправляется...

инфа:
8 полей - 8 значений.. необязательно всем приходить вместе, меняются по времени

LAST: передать последние значения по этим 8 полям


 
Reindeer Moss Eater   (2003-08-13 15:59) [11]

дык возращаться надо чтобы отправить клиенту текущую порцию инфо... а иначе ж ему ничего не отправляется...

Клиент еще ничего не ввел. Что ты ему собрался отправлять???


 
alt7   (2003-08-13 16:07) [12]

так ему не надо ничего вводить.. он подключился и данные ему посыпались.. (я где-то выше писал)

а мне теперь надо чтоб клиент мог посмотреть последние данные по 8 полям сразу


 
Reindeer Moss Eater   (2003-08-13 16:19) [13]

Ну так и отправь данные.
Не проверяя никаких буферов.
После чего читай его команду.


 
alt7   (2003-08-13 16:25) [14]

так во-первых не известно, когда клиенту в голову взбредет написать LAST.
Во-вторых, как только данные обработаны сервером их нуно отправить клиенту.
В-третьих, как написать обработку сообщения от юзера, таким макаром, чтоб если в данный момент от него ничего не пришло, то идти дальше по коду? (без всяких пауз, время критично)


 
Reindeer Moss Eater   (2003-08-13 16:29) [15]

так во-первых не известно, когда клиенту в голову взбредет написать LAST.

Стоп! Ты хотел отправить данные не дожидаясь ввода.


 
alt7   (2003-08-13 16:40) [16]

брррр....

смотри... сервер принимает постоянно данные с другого сервера... потом их обрабатывает и получает значения для полей... эти значения, как только обработаны передаются клиенту... и неважно, что за 5 секунд пришли данные скажем по 3м полям, а по 5ти другим нет...

Вот клиент подключается (имя, пароль) и тут ему на голову постоянно сыпятся значения полей...
к примеру пришло:
номера полей:

1) 2
2) 3
3) ничего не было еще
4) 5, потом пришло 4, потом 6
5) ничего
6) 3, 2, 7, 8
7) 2
8) ничего

клиент вводит LAST и я ему должен передать:
2,3,пусто,6,пусто,8,2,пусто

Отправил это и передаю опять свежепоступающие данные (которые пришли позже)


 
Reindeer Moss Eater   (2003-08-13 16:46) [17]

брррр...
1.
Вот клиент подключается (имя, пароль) и тут ему на голову постоянно сыпятся значения полей...
И как он (клиент) при этом сможет вводить свои данные?

2.
Ты уверен, что это задача Telnet сервера?


 
alt7   (2003-08-13 16:51) [18]

1. не знаю, у меня вводит (вот только с enter проблемка)
2. может и нет, но прога уже написана именно на нем (с TIDTCP были проблемы в свое время их так и не устранили.. я много на форумах спрашивал).. а теперь пара доделок надо.. (2 команды от клиента)


 
Reindeer Moss Eater   (2003-08-13 17:18) [19]

Трудно тебе помочь.
Протокол взаимодействия клиента и сервера туманен.
В качестве сервера зачем-то выбран TidTelnet.
Телнет клиент, позволяющий вводить пользователю данные во время вывода непрерывного потока данных с сервера, но не позволяющий нажать Enter......

Все это загадочно.


 
alt7   (2003-08-13 17:31) [20]

Не могу сказать, что туманен, я думаю - я нормально объяснил...
вероятно enter срабатывает, просто я не знаю как его отловить в буфере, как он там обозначен?

А что посоветуешь брать в качестве сервера? из инди и не TCPServer?


 
Reindeer Moss Eater   (2003-08-13 17:35) [21]

вероятно enter срабатывает, просто я не знаю как его отловить в буфере, как он там обозначен?

Его ловить не надо. Если он является ограничителем строки для ReadLn, то сразу после возврата из ReadLn (если нет таймаута) - ты поймал команду клиента ограниченную этим самым ограничителем.


 
nikkie   (2003-08-13 18:10) [22]

>alt7
забудь про конкретные компоненты и события. продумай сначала протокол. а то каша получается - сервер сыпет данные, и вдруг посередине этих данных получает комманду от клиента, приостанавливает свое дело, кидает ответ на комманду и начинает сыпать дальше? интересно, какой клиент в этом сможет разобраться. клиента-то ты сам пишешь или telnet пользуешься?


 
alt7   (2003-08-14 12:27) [23]

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


 
nikkie   (2003-08-14 13:14) [24]

>клиента пока нету, но буду потом писать, счас телнет...
вот тогда ты и задумаешься - зачем же ты сделал telnet сервер

делай readln с маленьким таймаутом.


 
alt7   (2003-08-14 16:10) [25]

а про это я уже писал, таймаут проходит, а readln не заканчивается



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2003.10.13;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.01 c
6-40536
Logan
2003-08-15 03:24
2003.10.13
Outlook Express


1-40348
Vovan
2003-10-01 21:33
2003.10.13
Перевод Delphi - C++


1-40400
Soi
2003-10-01 06:08
2003.10.13
Сортировка массивов


14-40598
Александр999
2003-09-25 07:09
2003.10.13
Опять модемы.........


1-40345
Стас
2003-10-01 23:25
2003.10.13
Помогите найти компонент - электронную таблицу аля MS Excel





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский