Главная страница
    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.46 MB
Время: 0.01 c
2-1150439891
Dmitrij_K
2006-06-16 10:38
2006.07.02
Про настройки D7


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


1-1148381092
dreamse
2006-05-23 14:44
2006.07.02
Передача параметров в ActiveX из HTML странички


3-1147005977
wirg
2006-05-07 16:46
2006.07.02
нужна помощь


2-1149954352
Fiallo4ka
2006-06-10 19:45
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский