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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TCP клиент зависает 
V
    Опции темы
CompWorm
Дата 27.3.2008, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Допеределыватель
***


Профиль
Группа: Участник Клуба
Сообщений: 1689
Регистрация: 6.12.2004
Где: /

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



привет всем!
пытаюсь сваять простой TCP сервер и клиент. у меня самый простой Indy из Delpi7. 

вот что я замутил: http://www.filehoster.ru/files/r8910

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

в сетевых делах я не сильно шарю, поясните плиз, в чем моя ошибка и главное, как избавиться от тормозов и зависонов... smile 

Это сообщение отредактировал(а) CompWorm - 27.3.2008, 16:07


--------------------
PM MAIL   Вверх
Sanchezzz
Дата 27.3.2008, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



1 антифриз лежит на форме? (компонент из инди).
2 попробуй переписать на потоки должно снизить тормоза. 


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
CompWorm
Дата 28.3.2008, 00:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Допеределыватель
***


Профиль
Группа: Участник Клуба
Сообщений: 1689
Регистрация: 6.12.2004
Где: /

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



Sanchezzz, 
спасибо что отозвался, а то обычно если в первые часа 3 никто не отвечает - тему можно хоронить  smile 
ладно, теперь по делу.
1) антифриз есть, но серчая по форуму несколько раз видел нарекания, что следует как-то решать проблему без него... хотя на данный момент без антифриза совсем труба. ( клиент виснет сразу. )
2) на счет потоков не совсем понял, как они влияют на клиент... потоки используются на сервере. разве их и в клиенте куда-то следует приляпать?

------ мой анализ ситуации:
1) делал, основываясь на книжке Бобровского по D7 (2004 г)и примере чата на Indy.  smile 
2) пример явно писался для 10 версии, более поздней версии компонентов, коими я не располагаю.... 
3) такой вывод я делал, так как в примере используется нечто, называемое IOHandlers, подходящего аналога в стандартных компонентах D7 нету и я пользовался для записи/чтения

Код

{без IOHandlers , но работает с виду нормально}
IdTCPClient1.WriteLn('Text'); 

{ошибки после дисконнекта, особенно, когда явно указываю тайм-аут в скобках...}
Msg := IdTCPClient1.ReadLn;  



возможно, это как-то связано.

Есть у кого-нибудь еще предложения?



Это сообщение отредактировал(а) CompWorm - 28.3.2008, 01:06


--------------------
PM MAIL   Вверх
MetalFan
Дата 28.3.2008, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



если это индейцы с поставки делфи, то в первую очередь обнови их с официального сайта.


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
CompWorm
Дата 5.4.2008, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Допеределыватель
***


Профиль
Группа: Участник Клуба
Сообщений: 1689
Регистрация: 6.12.2004
Где: /

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



ок, обновил, однако ж виснет smile

проблема явно в том, что в цикле происходит чтение пустого буфера и клиент виснет.

научите меня ставить условие на нечтение пустого буфера плиз smile 


--------------------
PM MAIL   Вверх
Sanchezzz
  Дата 5.4.2008, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



если размер буфера больше 0 то читаем иначе выход..

Код

procedure Tform1.idTCPServer1Execute(AContext: TIdContext);
 var
 I : Integer;
begin
  try
    I := AContext.Connection.IOHandler.RecvBufferSize; {.Buffer.Size;}
    If I >= 1 then
      begin
   //тут читаем и делаем с данными что нужно
      end;
  finally
  end;
end;



--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
CompWorm
Дата 6.4.2008, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Допеределыватель
***


Профиль
Группа: Участник Клуба
Сообщений: 1689
Регистрация: 6.12.2004
Где: /

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



Sanchezzz,
спасибо конечно, НО

Цитата

procedure Tform1.idTCPServer1Execute(AContext: TIdContext);

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

но "с твоего пинка", Sanchezzz,  я все же таки нашел решение!
вот оно:

Код

procedure TForm1.Timer1Timer(Sender: TObject);
var
  Msg : String;
begin

  if IdTcpClient1.IOHandler.InputBuffer.Size = 0 then exit;
  Msg := IdTCPClient1.IOHandler.ReadLn;

 end;


ты был близок  smile 

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

   if not IdTcpClient1.Connected then exit;


на этом всё. всем спасибо за помощь, тему можно считат закрытой  smile 


--------------------
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

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

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

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

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

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


 




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


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

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