![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Зависает 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