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

Вниз

повторно не отсылает stream   Найти похожие ветки 

 
Lomik   (2003-09-20 22:47) [0]

Пересылаю файл с ServerSocket на ClientSocket, файл отлично доходит.
Но если я хочу повторить, ServerSocket выкидывает ошибку – List index out of bounds (1)
Вот код:
// Server Socket

procedure TForm1.Button1Click(Sender: TObject);
var str2 : TMemoryStream;
begin
str2 := TMemoryStream.Create;
str2.LoadFromFile("C:\pic.jpg");
ServerSocket1.Socket.Connections[1].SendStreamThenDrop(str2);
end;

// Client Socket

const
MAX_BUF_SIZE = $4095;

var
Form1: TForm1;
fStream: TFileStream;
...

procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
fStream:= TFileStream.Create("screen.jpeg", fmCreate);
end;

procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var
count:Integer;
buffer: Array [0..MAX_BUF_SIZE] of Char;
begin
repeat
Socket.Lock;
count:= Socket.ReceiveBuf(buffer,SizeOf(buffer));
if count > 0 then
fStream.WriteBuffer(buffer,count);
Socket.Unlock;
until (count <= 0);
end;

В чем ошибка Народ ?
И еще, как узнать размер файла который приходит через Stream.
Или как еще сделать progressbar

P.S. помогите, кто знает


 
Senti   (2003-09-21 00:54) [1]

Возможна ошибка в том, что после приема файла сокет отсоединяется. (т.к. ты используешь SendStreamThenDrop).
Пробуй просто SendStream.

А так как сервер не находит ServerSocket1.Socket.Connections[1], он выкидывает ошибку.

По поводу прогресс бара.
Чтобы нормально прогресс бар работал, тебе надо остылать не через SendStream, а через SendBuf.
Сначала отсылаешь размер файла, а также его имя.
Клиентом это все обрабатываешь и открываешь сокет на прием. Считываешь в Stream данные. И как только принятая длинна будет равнятся исходной, сохраняешь Stream и закрываешь сокет.

Лучше используй два сокета на сервере и на клиенте.

Один на обмен служебной информацией (размер файла, окончание, начало приема). А второй непосредственно на прием\отсылку файла.


 
Ole   (2003-09-23 05:06) [2]

Стрим нилится (освобождается) после пересылки.
В хелпе это описано. Т.е. надо заново создать стрим.



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

Текущий архив: 2003.11.17;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.024 c
14-56836
Vorobyev Sergey
2003-10-28 06:58
2003.11.17
Сегодня родился Билл Гейтс


14-56896
K .o.Z
2003-10-25 12:39
2003.11.17
Интернет


1-56714
mc_duck
2003-11-07 09:36
2003.11.17
Адрес объекта.


3-56518
ripp
2003-10-27 17:57
2003.11.17
В Дельфи 6 ругается на VarArrayOf (undeclared identifier)


14-56825
Грустный такой
2003-10-27 21:17
2003.11.17
Оцените, плиз, грустный такой стишок...ну очень надо