Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.027 c
15-1149684949
Elen
2006-06-07 16:55
2006.07.02
pdf в doc


15-1149245537
alles
2006-06-02 14:52
2006.07.02
Интересно, кто на форуме знает язык Esperanto?


2-1149952843
ArchValentin
2006-06-10 19:20
2006.07.02
Иконки в ЕХЕшниках


6-1140722138
Виктор8
2006-02-23 22:15
2006.07.02
Скорость dialup-соединения


2-1149930887
Exile
2006-06-10 13:14
2006.07.02
перевести из Text в String или в Char




   Наверх