Главная страница
    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.44 MB
Время: 0.01 c
1-56633
незнай-ка
2003-11-05 13:35
2003.11.17
Вылетает ошибка.. в чем дело?


14-56911
MVVD
2003-10-25 10:54
2003.11.17
Глючит HP-610C


4-56953
LOMic
2003-09-22 11:45
2003.11.17
Непонятки с WaitForSingleObject


1-56608
P0tia
2003-11-04 11:49
2003.11.17
MainMenu


3-56455
Vick
2003-10-29 12:42
2003.11.17
Как отследить передвижение по записям в DBGrid





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