![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибка при передаче файла [D6, WinXP]
Beglec © (2003-09-30 00:05:00)
Этот вопрос задавал, но вразумительного ответа не услышал.
В общем есть TServerSocket и TClientSocket
клиенты посылают запросы что им требуется всякие файлы.
Server: -> Socket.SendStream(TMemoryStream);
если Клиент один подцеплен к серверу то все ОК вне зависимости от размера файла.
Если хотя бы два подцепились и запросили файло, то получается жопа. Оба клиента не получают файлы.
А сервер пишет что типа мол "я то отправил файло, ко мне притензий не каких".
Что странно... Делал файло размером в 1GB и сервер отправилял этот гиг за 1с. (что сами понимаете физически не возможно).
При коннекте одного клиента в конце концов клиент получает файл.
При коннекте более 1 клиента маленькие файлы еще пролетаю а большие застревают.
Вообщем как я понял нужно обрабатывать событие OnWrite.
внимание вопрос: но как правильно обрабатывать onWrite кто подскажет?
Digitman (2003-10-03 08:17:00) [1]
> Socket.SendStream(FileSteram) (размером скажем с 1 GB)
> ShowMessage("Операция выполнена");
да не выполнена она !)
убедись в этом сам :
Socket.SendStream(MyStream)
try
ShowMessage("На данный момент в очередь на передачу поставлено " + IntToStr(MyStream.Position) + " байт из данного потока); // [1]
except
ShowMessage("Операция выполнена, поток полностью поставлен в очередь передачи и уничтожен !"); // [2]
end;
если возникнет ситуация [1], то жди обязательного возбуждения события OnWrite() и повтори в его обработчике исполнение всего этого куска кода !
Anatoly Podgoretsky (2003-10-02 21:53:00) [2]
Еще раз читаем Digitman © (30.09.03 08:09) [1]
нет вразумительного вопроса - нет и вразумительного ответа
beglec (2003-10-02 21:22:00) [3]
Digitman ->
Вопрос я думаю "вразуметельно" написан :)
Вопрос: Как правильно обрабатывать onWrite?
Сам попробуй
по событию
OnClick;
Socket.SendStream(TFileSteram) (размером скажем с 1 GB)
ShowMessage("Операция выполнена");
Засеки через сколько появился это сообщение?
А потом может и поймешь мой "вразумительный" вопрос.
С Уважением
Fredericco (2003-09-30 10:59:00) [4]
Событие OnWrite, как на клиентской стороне так и на серверной, символизирует лишь об одном: сокет готов к передаче данных. Готовность сокета есть следствие двух причин:
1) Сокет создался, подконнектился и готов к пердаче;
2) В процессе отправки информации буфер сокета заполнился, а вот теперь освободился и готов снова к передаче данных.
Как обрабатывать постарайся сам разобраться, а то эффекта не будет.
Verg (2003-09-30 10:16:00) [5]http://www.delphimaster.ru/cgi-bin/forum.pl?id=1063782976&n=4
Digitman (2003-09-30 08:09:00) [6]
> но вразумительного ответа не услышал.
нет вразумительного вопроса - нет и вразумительного ответа
> то получается жопа
ну очень "вразумительное" объяснение проблемы !
> сервер пишет что типа мол "я то отправил файло, ко мне притензий
> не каких".
не может он такого "писать", если только ты сам его не заставишь эту чушь рисовать на экране
> нужно обрабатывать событие OnWrite.
безусловно !