Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.48 MB
Время: 0.009 c
3-48939
Lexa
2002-12-22 04:33
2003.01.16
DBGrid


4-49346
dumb
2002-11-21 14:22
2003.01.16
CoCreateInstance в TThread


1-49104
Berg
2003-01-05 10:30
2003.01.16
Обработка исключений


14-49292
Cr@sh
2002-12-27 13:15
2003.01.16
Пищит монитор...


3-48885
ruslanyd
2002-12-19 22:35
2003.01.16
Обновление Lookup полей





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