Форум: "Основная";
Текущий архив: 2003.01.16;
Скачать: [xml.tar.bz2];
Внизпроблема при работе с файлами и сетью одновременно Найти похожие ветки
← →
AngeL B. (2003-01-04 14:54) [0]Никто не встречал такой беды? Работаю с компонентами Indy. При подключении пользователя к программе необходимо записать информацию приходящую от него в файл. Если открыть файл в процессе соединения и записать туда данные, то первая же попытка отослать данные по сети приводит к исключению. Если данные в файл не писать, то все в порядке, но тогда не понятно, что делать с данными, так как пользователей может быть много, а делать специальную очередь для данных не очень хочется.
← →
Reindeer Moss Eater (2003-01-04 14:56) [1]приводит к исключению
Какому?
← →
Sergey V. Sahdrin (2003-01-04 15:01) [2]Перед передачей файл закрываешь?
← →
AngeL B. (2003-01-04 15:04) [3]Socket error # 10053: Software caused connection abort.
Кроме блока работы с файлами ничего больше в функции не делается.
Если ее вызов заремарить, то все чики-пуки. Данные получаются, выводятся на экран и т.д.
← →
AngeL B. (2003-01-04 15:08) [4]
> Перед передачей файл закрываешь?
Закрываю. Но какая разница.
Пробовал и через стандартные AssignFile/Rewrite/CloseFile и через TFileStream.
← →
Reindeer Moss Eater (2003-01-04 15:10) [5]1. Indy ни разу не знает работаешь ли ты с файлами или нет.
2. Socket error # 10053: Software caused connection abort. Вызвано тем, что одна из сторон аварийно завершила работу и соединение прекращено.
← →
AngeL B. (2003-01-04 15:14) [6]
> 2 Reindeer Moss Eater
Так то оно так. Но только если вставить в код следующие строки, то все перестает работать, хотя до этого работало.
AssignFile(F, "d:\temp\a.txt");
Rewrite(F);
CloseFile(F);
← →
AngeL B. (2003-01-04 15:17) [7]Ладно, видимо ошибка где-то не здесь. Дубу копать в глубь :)
← →
Reindeer Moss Eater (2003-01-04 15:19) [8]Путь d:\temp существует?
GetLastError существует? Что говорит?
← →
AngeL B. (2003-01-04 15:36) [9]Существует, и файл там создается. И данные туда записываются (если такой оператор вставить), только с сокетом после этого работать невозможно. :(
← →
Reindeer Moss Eater (2003-01-04 15:38) [10]Про трассировку слышал когда-нибудь? Попробуй.
У меня кофе кончился....
← →
AngeL B. (2003-01-04 15:44) [11]
2Reindeer Moss Eater
Да слышал. Трассировал уже, только недостаточно глубоко, видимо. Все равно спасибо.
← →
Reindeer Moss Eater (2003-01-04 15:48) [12]Надо не глубоко.
Надо часто.
← →
Reindeer Moss Eater (2003-01-04 15:49) [13]unit LogUnit;
interface
procedure Log(const AMsg:string; const AParam:string = "");
implementation
uses SysUtils;
var LogName:string;
procedure Log(const AMsg : string; const AParam : string = "");
var F:Text;
begin
Assign(F,LogName);
try
if FileExists(LogName) then Append(F) else Rewrite(F);
Writeln(F,FormatDateTime("dd.mm.yyyy hh:mm:ss",Now),#9,AMsg,#9,AParam);
finally
Close(F);
end;
end;
initialization
LogName:=ChangeFileExt(ParamStr(0),".log");
end.
← →
Sergey V. Sahdrin (2003-01-04 16:08) [14]а целиком отправить исходник проги? или хотя бы тех двух процедур?
← →
AngeL B. (2003-01-04 18:42) [15]Да все решил. Я же говорил что проблема не в файлах. Мне бы пришлось отсылать тебе такую кучу всего, причем это все многопоточное с критическими секциями, событиями, синхронизацией и т.д.
Проблема была в небольшой задержке, создаваемой функциями работы с файлами. В протоколе обмена оказалась маленькая разсогласованность и сервер закрывал соединение раньше чем клиент успевал отправить подтверждение приема (которого сервер не ждал) (а без файлов/задержки успевал). Вот и вся проблема.
Всем большое спасибо!
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.01.16;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c