Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2003.07.03;
Скачать: [xml.tar.bz2];

Вниз

передача файлов   Найти похожие ветки 

 
Akni   (2003-04-28 17:59) [0]

Добрый день, Мастера!

Передаю файл с пом. Сокет-компонентов в неблок. режиме.
Клиент посылает файл серверу таким образом:

Var fStream: TFileStream;
iSize: integer;
iCode: integer;
….

try
try
fStream:=TFileStream.Create(fName,fmOpenRead);
iSize:=fStream.size;

iCode:=cdFILE; //тип данных
fClientSocket.Socket.SendBuf(iCode, SizeOf(iCode));

fClientSocket.Socket.SendBuf(iSize, SizeOf(iSize)); //размер данных (файла)
fClientSocket.Socket.SendStream(fStream); //сам файл
except
on E:Exception do
begin
fLogStr:=E.Message;
Synchronize(WrLog);
PostMessage(fHandle,wm_RefreshClients,cdERROR,0);
end;
end;
finally
fStream.Free; // <----- здесь получаю AV
end;

Данные отправляются (и даже принимаются на сервере) в полном размере, но на строке fStream.Free получаю AV.
Подскажите, пожалуйста, в чем может быть дело?


 
Anatoly Podgoretsky   (2003-04-28 18:15) [1]

Для начала попробуй поместить fStream:=TFileStream.Create перед самым первым try


 
Akni   (2003-04-28 18:27) [2]

1. Попробовала. Не помогло.

2. Попробовала еще такой вариант:

fStream:=TFileStream.Create(fName,fmOpenRead);
iSize:=fStream.size;

fStream.Free;

iCode:=cdFILE;
fClientSocket.Socket.SendBuf(iCode, SizeOf(iCode));
fClientSocket.Socket.SendBuf(iSize, SizeOf(iSize));
fClientSocket.Socket.SendStream(TFileStream.Create(fDat.fClientName,fmOpenRead));
это работает. Но, по-моему, «коряво» это как-то – создавать поток только для того, чтобы размер узнать, а потом еще один, чтобы сам файл послать.
Может, можно это как-то унифицировать?


 
$hade   (2003-04-29 08:39) [3]

а случаем
fClientSocket.Socket.SendStream(fStream);
не закрывает файл сам?
попробуй после этой строки сделать например
fStream.seek(0,0)...


 
Sheriff   (2003-04-29 10:47) [4]

Note: The Stream passed as a parameter to SendStream becomes “owned” by the windows socket object. The Windows socket object frees the stream when it is finished with it. Do not attempt to free the stream after it has been passed as a parameter.


 
$hade   (2003-04-29 10:59) [5]

хыы...ну я же говорил...:-)



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2003.07.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.008 c
1-7438
Илайдж
2003-06-23 14:06
2003.07.03
Печать содержимого TImage.


3-7330
Delph1
2003-06-10 09:09
2003.07.03
Помогите красиво выбрать иерархические данные.


14-7702
gn
2003-06-17 13:12
2003.07.03
*.tbl


1-7415
victor_ch
2003-06-23 09:40
2003.07.03
как правой клавишей мыши перейти на нужный узел в TreeView


14-7676
alpine
2003-06-15 13:07
2003.07.03
Помогите с выбором !





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