Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Зависает IdTCP Demo6, откомпилированный в Делфи-7


Winni ©   (2004-07-02 16:54:00) 

В Делфи6, в папке Demo\Internet есть пример Chat, выполненный с помощью IdTCPClient  и IdTCPServ. Все работает хорошо. Но если те эе тесты компилировать в Делфи7, этот Демо зависает. Причем экзешники, компилированные Д6, работают нормально (на моей машине). Зависание происходит после того как:
- Сервер активизирован
- Клиенту задано имя (Login) и клиент подключился
- Сервер посылает сообщения ( и клиент их получает):
   AThread.Connection.WriteLn('ISD Connection Established...');
   AThread.Connection.WriteLn('Please send valid login    sequence...');
   AThread.Connection.WriteLn('Your Name:');
. . . и далее . . .
   Client.Name := Msg;
   UpdateClientList;
   BroadcastMessage('System', Msg + ' has just logged in.');
   AThread.Connection.WriteLn(memEntry.Lines.Text);

. . .  далее не нашел откуда - клиенту приходит текст:
Welcome to the Indy TCP Server Demo Chat.
This program is disigned simply to show a slightly more advanced  usage of some of the commong components found in Indy.

Клиент прослушивает сеть следующим образом:

procedure TForm1.Timer1Timer(Sender: TObject);
var
 Com,
   Msg: string;
begin
 if not IdTcpClient1.Connected then
   exit;

 Msg := IdTCPClient1.ReadLn('', 5);

 if Msg <> '' then
   if Msg[1] <> '@' then
   begin
     { Not a system command }
     memLines.Lines.Add(Msg);
   end
   else
   begin
     { System command }
     Com := UpperCase(Trim(Copy(Msg, 2, Pos(':', Msg) - 2)));
     Msg := UpperCase(Trim(Copy(Msg, Pos(':', Msg) + 1, Length(Msg))));
     if Com = 'CLIENTS' then
       lbClients.Items.CommaText := Msg;
   end;

end;

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


Winni   (2004-07-02 20:45:00) [1]

Конечно, можно не использовать формы, но все же формы удобнее и интересно понять, в чем дело. По indy совсем нет примеров. Д7 ссылается на Интернет, а там как я понял, исходники модулей Indy.
Где бы найти примеры применения компонент Indy?


Reindeer Moss Eater   (2004-07-02 18:57:00) [2]

Оказывается, достаточно поставить на обе формы IdAntiFreez.

Так вот оказывается что такое "зависание"

Если никого не двигать - все работает нормально.

1. Зачем серверу форма?
2. Зачем её двигать?
3. Зачем TidTCPClient в клиенте помещать на форму, которую можно двигать? /а не в датамодуле держать например/


Winni   (2004-07-02 18:53:00) [3]

Оказывается, достаточно поставить на обе формы IdAntiFreez. Однако появляется другое - если двигать форму клиента в Run-Time, то зависает и сервер и оба клиента ( пробую на одной машине в таком сочетании ).Если никого не двигать - все работает нормально. На форуме было сказано, что помогает TIdSync ( в аналогичной ситуации). Нет ли у кого - нибудь примера решения этой задачки?


Reindeer Moss Eater   (2004-07-02 16:59:00) [4]

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

Таймер кнопкой заменять нельзя. Надо обязательно кнопкой с рисунком (желательно рисунком таймера) TbitBtn


Наверх

Титульная страница Поиск, карта сайта Написать письмо