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

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.046 c
7-1080389662
Insert
2004-03-27 15:14
2004.04.11
Серийник жесткого диска...


14-1079303997
putyaga
2004-03-15 01:39
2004.04.11
помогите люди


3-1079523655
ligor
2004-03-17 14:40
2004.04.11
подключение к DB2 через DBExpress


3-1081770759
Balkon
2004-04-12 15:52
2004.04.11
Массивы в Базе данных.


14-1082025193
infom
2004-04-15 14:33
2004.04.11
Здание





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский