Текущий архив: 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.46 MB
Время: 0.04 c