Форум: "Сети";
Текущий архив: 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