Главная страница
    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.01 c
4-56952
vic_vm
2003-09-20 16:05
2003.11.17
Как предотвратить загрузку Dll в определенный процесс


3-56509
exciter__
2003-10-27 19:18
2003.11.17
Interbase и DECLARE CURSOR. (Продолжаем диалог)


1-56665
TUser
2003-11-05 10:12
2003.11.17
Fonts in RichEdit


1-56647
Anatol
2003-11-05 13:01
2003.11.17
Сервисы


1-56643
Svetik
2003-11-05 13:31
2003.11.17
Можно программно заставить открыться определенный файл Excel?





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