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

Вниз

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

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

Наверх





Память: 0.47 MB
Время: 0.011 c
10-1120635105
AbrosimovA
2005-07-06 11:31
2006.07.02
Требуется помощь по IConnectionPointContainer


2-1150438347
Мурзилка
2006-06-16 10:12
2006.07.02
как пользоваться таймером?


1-1148387421
novill
2006-05-23 16:30
2006.07.02
Как описание класса разбить на несколько модулей?


3-1147101888
__alex
2006-05-08 19:24
2006.07.02
Есть ли в Paradox каскадное удаление?


6-1140519916
Nachinaushiy
2006-02-21 14:05
2006.07.02
Место на диске у конечного хоста при передачи данных





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