Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

IdTCPClient / IdTCPServer   Найти похожие ветки 

 
Manulo ©   (2004-01-30 18:08) [0]

Есть сетевое приложение, состоящее из программы-клиента и программы-сервера:

Со стороны сервера

procedure TForm1.ping_timerTimer(Sender: TObject);
begin
 ping_client.Host:=get_ip;
 ping_client.BeginWork(wmWrite,1000);
end;



procedure TForm1.ping_clientWorkBegin(Sender: TObject;
 AWorkMode: TWorkMode; const AWorkCountMax: Integer);
var i : integer;
   s : string;
begin
 try
   ping_client.Connect;
   ping_client.WriteLn("ping");
   s:=ping_client.ReadLn;
   ping_client.Disconnect;
//
   Label22.Caption:=s;
//
   ping_client.EndWork(wmWrite);
 except
   Memo1.Text:=Memo1.Text+"ERROR!";
   ping_client.EndWork(wmWrite);
 end;
end;


Со стороны клиента
procedure TForm1.ping_servExecute(AThread: TIdPeerThread);
var s : string;
begin
 s:=IntToStr(info.time_left)+"!"+IntToStr(info.Time);
 AThread.Connection.WriteLn(s);
 AThread.Connection.Disconnect;
end;


Проблема вот в чём, эта система работает от силы часа два, три (пинг идёт ежесекундный), потом по непонятным причинам сервер прекращает посылать сообщения. Помагает только перегрузка приложение-сервера :( Вот, собственно, вопрос, как это исправить?


 
Manulo ©   (2004-01-30 19:54) [1]

Хорошо, дополним вопрос. Может ли в этом глюке участвовать буфер? Точнее такая вредная привычка, как его переполнение? Если да, то как избавиться от такой вредной привычки?


 
Rouse_ ©   (2004-01-30 20:57) [2]

Для чего нужен ежесекундный пинг? Для определения, не отвалился ли сервер? Не проще установить TCP соединение?


 
Rouse_ ©   (2004-01-30 21:07) [3]

Да и не пинг это по существу, а обмен сообщениями, подтверждающий наличие приемника получателя...


 
Manulo ©   (2004-01-31 12:19) [4]

Задача простая: Есть N машин, находяшихся в одной сетке. Сервер постоянно сканирует эти машины, то есть каждую секунду подключается к следующей по списку машине, и "пингует" её по определённому порту, точнее даже не её, а программу-клиента, которая в ответ на пинг высылает некоторые быстроменяющиеся переменные. Кроме того, необходимо постоянно иметь данные о том, запушена ли на удалённом компе программа клиент. Лутшего выхода, как постоянная пропинговка, я пока не нашёл


 
Manulo ©   (2004-01-31 12:21) [5]

Есть ещё варианты, почему глюк возникает... Возможно при каждом новом подключении сервер затребывает новый номер сокета, и в конце концов свободные сокеты заканчиваются.
Возникает вопрос, как заставить idTCPClient не открывать сокет с новым номером, а использовать постоянный номер сокета, то есть как этот номер жёстко задать?


 
Manulo ©   (2004-01-31 14:22) [6]

Методом тестов установил, что перестаёт выполнятся процедура TForm1.ping_clientWorkBegin в коде клиента (первой строкой процедуры прописал вывод на лейбочку текущего времени).


 
Rouse_ ©   (2004-01-31 15:07) [7]

А для чего ты постоянно дисконнект делаешь? Соединяешь все клиенты с сервером и все... и отправляй данные в открытое соединение без разрыва. Можно даже не отправлять, просто проверять на наличие соединения.
ИМХО велосипед изобретаешь...


 
Manulo ©   (2004-01-31 17:51) [8]

Тут проблемка. Я не смог нормально различить различные соеденения :( Допустим есть комп№1 им комп №2. как посласть сообщение конкретному компу? И как конкретно от него получить ответ, тьочнее как распознать, что от него?



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

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.028 c
1-1082302900
TechnDreamer
2004-04-18 19:41
2004.04.11
Обработка текста в TRichedit с учетом форматирования


1-1082113310
msgipss
2004-04-16 15:01
2004.04.11
Опыт создания обработчиков событий


6-1075720629
__boolean
2004-02-02 14:17
2004.04.11
Систмы передачи данных. Help


1-1082390271
Torin
2004-04-19 19:57
2004.04.11
Free


14-1079338777
IceBeerg
2004-03-15 11:19
2004.04.11
Help! Комп не включается