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

Вниз

Место на диске у конечного хоста при передачи данных   Найти похожие ветки 

 
Nachinaushiy   (2006-02-21 14:05) [0]

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


 
RO   (2006-02-21 14:10) [1]

Приводи код сервера и код клиента.


 
umbra ©   (2006-02-21 14:11) [2]

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


 
Nachinaushiy   (2006-02-21 14:19) [3]


> RO   (21.02.06 14:10) [1]
> Приводи код сервера и код клиента.

код клиента и код сервера очень большой и весь на классах... слижком много приводить можно только данную часть:
   CreateDir(Config.IncomingPath+IntToStr(aTaskQuery.TaskId));
   aFileStream := TFileStream.Create(Config.IncomingPath+IntToStr(aTaskQuery.TaskId)+"\"+aTaskQuer y.FileName, fmCreate);
   aPosition := 0;
   aExit     := False;
   while not aExit do
   begin
     if (aTaskQuery.DataSize - aPosition) < CONST_DATA_SENDBUFFER_SIZE then
     begin
       aBufSize := aTaskQuery.DataSize - aPosition;
     end else
     begin
       aBufSize := CONST_DATA_SENDBUFFER_SIZE;
     end;
     try
       AThread.Connection.ReadBuffer(aBuffer, aBufSize);
     except
       on E: Exception do
       begin
         DoOnTransportStringMessage("Error S032: Клиент: ""+TSimpleClient(AThread.Data).FNodeName+"". Ошибка приема данных с клиента: " + E.Message);
         exit;
       end;
     end;
     try
       aPosition := aPosition + aBufSize;
       aFileStream.Write(aBuffer, aBufSize);
     except
       on E: Exception do
       begin
         DoOnTransportStringMessage("Error S033: Клиент: ""+TSimpleClient(AThread.Data).FNodeName+"". Ошибка сохранения данных: " + E.Message);
         Exit;
       end;
     end;
     //DoOnNotifyTransportData(aPosition, aTaskQuery.DataSize);
     if aTaskQuery.DataSize <= aPosition then
     begin
       aExit := True;
     end;
   end;


> umbra ©   (21.02.06 14:11) [2]
> так и надо на сервере при подключении каждого клиента проверять
> доступное место на диске, вычитать зарезервированное уже
> подключившимися клиентами и если места боьше нет, то нового
> клиента отключать

Идея хорошая и приятная ... как сам не дошел) Спасибо
Но ексепшен почему то не работает(((((


 
umbra ©   (2006-02-21 14:34) [4]


> Но ексепшен почему то не работает(((((

потому что его никто не возбуждает. для метода FileStream.Write надо проверять, что он возвращает. Если что-то пошло не так, то он вернет 0


 
Nachinaushiy   (2006-02-21 14:39) [5]

спасибо я понял



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

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

Наверх




Память: 0.48 MB
Время: 0.042 c
2-1149776525
Ошибка:)
2006-06-08 18:22
2006.07.02
Конвертация данных типа Char!


15-1149708868
Kolan
2006-06-07 23:34
2006.07.02
Помогите скомпилить проект на C++


1-1148317964
Krants
2006-05-22 21:12
2006.07.02
Как получить реальное изображение компонента


2-1150407042
learner
2006-06-16 01:30
2006.07.02
Нужно ли закрывать Handle, получаемый от FindResource ?


2-1149863408
itonixxx
2006-06-09 18:30
2006.07.02
DBLookupComboBOx