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

Вниз

повторно не отсылает 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.44 MB
Время: 0.008 c
1-56734
MaG
2003-11-06 19:13
2003.11.17
Запуск EXE


11-56553
Ash
2003-02-25 14:53
2003.11.17
TStrList


14-56881
default
2003-10-25 02:10
2003.11.17
Знатокам теории пределов


6-56790
noname666
2003-09-12 14:32
2003.11.17
sendto


1-56597
scorpi
2003-11-06 07:56
2003.11.17
Считывание координат с Формы





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