Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.16;
Скачать: CL | DM;

Вниз

проблема при работе с файлами и сетью одновременно   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.024 c
14-49221
Дмитрий К.К.
2002-12-29 07:46
2003.01.16
Именинники 29 декабря


3-48877
Anatoliy
2002-12-19 13:40
2003.01.16
Встроенные функции Access


1-49058
bvn123
2003-01-04 12:15
2003.01.16
Как получить полное имя файла запущенного приложения в нем самом


6-49193
Evgeny
2002-11-16 12:50
2003.01.16
Net start


3-48893
xenon
2002-12-20 09:54
2003.01.16
Передача параметра в MDIChild