Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ошибка при передаче файла [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.


безусловно !


Наверх

Титульная страница Поиск, карта сайта Написать письмо