![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
idFTP
Zalm © (2010-02-16 17:45:00)Проблема такая, нужно раздавать файл одновременно на несколько конектов, всё вроде бы как надо делается, но одно но. Допустим приконектились три юзера, один тыкает кнопку хочет брать файл размером 1 гб например, началась закачка, потом тыкают кнопки другие юзеры что хотят ЭТОТ же файл. У них закачка стоит на 0 пока, как только первый клиент скачал файл, сразу рандомно у той пары юзеров начинает качаться этот файл, как заканчивает кторой качать, сразу же начинает третий... то есть блин так не приятно там какие-то махинации творятся они чета там рандомно в очередь какую-то становятся... а мне нужно что бы сразу один файл могло неск человек качать. Код вот такой у меня:
procedure TForm2.FTPRetrieveFile(ASender: TIdFTPServerContext; const AFileName: string; var VStream: TStream);
var
fil2 : TMemoryStream;
begin
Fil2:=TMemoryStream.Create;
if Fil<>nil then
begin
fil.Seek(0,0);
Fil2.CopyFrom(fil,fil.Size);
end;
VStream:=fil2;
end;
Fil это TFileStream, туда загружен файл шоб каждый контекст не мучал его каждый раз(это временно для тестов), поэтому просто копирую оттуда данные и всё. как я описал выше этот код раздает файл по какой-то там своей внутренней очереди xD:( как сделать что бы файлэ мог раздаваться сразу всем кто просит? что попровить надо?... второй день меня это мучает...
Не проходите мимо знающие люди пожалуйста)
Zalm (2010-02-20 19:49:00) [1]странно.
Но у мя два фтп сразу там работает, может из-за этого и лаг был, хотя я второму порты точно менял, а вот дата порт мог упустить.
Теперь еще странная фича вышла, на компе у себя всё проверяю, всё работает, даже неск клинетов сразу, запускаю на сервере, первый фтп на стандартных портах 20 21 работает, а второй у которого не стандартные, нихочит, вернее он работает, но файл передавать отказывается напрочь, говорит типа порт не может испольховаться, хотя брандмауер и фаервол специально отключил
sniknik (2010-02-20 08:47:00) [2]> ставлю 0
я дефаултные 20 ни на что не менял, и работало.
Zalm (2010-02-19 20:52:00) [3]Да я просто сохранил не так) поэтому там и сервер.ехе)
Проблема была еще меньше чем думал, у сервера стоит параметр defaultdataport 20, ставлю 0, и всё работает. А клитическая секция это я для того ставил что бы из OnWork обновлять сколько скачалось, потому что я когда писал http клиент, без критической секции на onWork программа просто висла
Вобщем спасибо большое за участие, и помощь в решении проблемы
sniknik (2010-02-19 19:29:00) [4]даже не знаю что сказать... посмотрел, убрал мусор (какие то критические секции, ни о чем), отформатировал, добавил обработчик ошибок (посмотреть что на сервере), скомпилил.... и не получил глюка, все работает.
хотя ничего серьезного не менял, чистая "косметика" по минимуму.
http://www.filefactory.com/file/b02edff/n/App.rar
запускал на скачку один и тот же файл 1,37гиг размером. одновременно (клиента с именем server.exe (???) положил в разные папки, т.к. скачивая он ложит файл рядом, и запустил).
Zalm (2010-02-19 18:58:00) [5]Посмотрел, когда первый клиент качает файл, а второй подключается и тоже хочет качать файл, сервер пишет 10048 адрес алреди ин юс...
Только не понял какой адрес, и что с этим сделать...
Zalm (2010-02-19 11:30:00) [6]Может на почту?
Хорошо, посмотрите пожалуйста тогда вечером, если вам будет не сложно
sniknik (2010-02-19 11:07:00) [7]:)
Внутренняя ошибка сервиса.
Мы уже в курсе и стараемся исправить как можно быстрее. Возвращайтесь немного позже, все уже будет работать.
блокировки это от локалки. только вечером могу посмотреть.
Zalm (2010-02-19 10:44:00) [8]
> ОШИБКА
Извиняюсь, вот тогда на народе
http://narod.ru/disk/18060229000/App.rar.html
sniknik (2010-02-19 10:26:00) [9]ОШИБКА
Запрошенный URL не может быть доставлен
Во время доставки URL: http://letitbit.net/download/3756.36b637fd3ddc72404af728b1d/App.rar.html
Произошла следующая ошибка:
* Доступ запрещён.
Настройка контроля доступа не даёт возможности выполнить Ваш запрос в настоящее время. Пожалуйста, свяжитесь с Вашим системным администратором, если Вы считаете это неправильным.
sniknik (2010-02-19 10:24:00) [10]> работать-то оно может и работает правильно, только сразу с двумя клиентами не работает
не вяжется одно с другим.
> Что отключается клиент с месагой уже выше писал какой...(
вообще то интереснее была бы месага с сервера, почему он разрывает связь/прерывает поток, ошибка там, а у клиента вполне нормальная реакция на завершенное сервером соединение.
по тому что написано, проблема как раз в однопотоковости когда следующий коннект прерывает первый т.к. ему негде выполнятся/или конфликте между двумя.
> без него всё отлично работает.
я бы не называл описанное "отлично"...
Zalm (2010-02-19 10:21:00) [11]Вот приложения, запустите два клиента сразу, попробуйте и там и там поставить качать файл сразу, то есть нужен большой файл будет, и увидите глюк
http://letitbit.net/download/3756.36b637fd3ddc72404af728b1d/App.rar.html
Если кто скачает и посмотрит буду благодарен.
Zalm (2010-02-19 10:03:00) [12]
> p.s. если и там все так хорошо и в проге правильно откуда
> проблемы? голову собеседникам поморочить? раз все работает,
> не парьте моск.
Дык причем тут правильно\не правильно, работать-то оно может и работает правильно, только сразу с двумя клиентами не работает, вот в чем единственный косяк. Что отключается клиент с месагой уже выше писал какой...(
И я шедулером вобще только один раз пользовался, без него всё отлично работает.
Медвежонок Пятачок (2010-02-19 09:51:00) [13]Я поочередно использую 9.0.18 и 10.0.52
В десятке:
TIdCustomHTTPServer = class(TIdTCPServer)
Правда в десятке появилась поддержка forks но ее еще включить надо
sniknik (2010-02-19 09:35:00) [14]могу только предположить, что инди у тебя девятый.
Медвежонок Пятачок (2010-02-19 09:29:00) [15]во всяком случае с http нужен шедулер.
у меня без шедулера замечательно работет.
кроме того я верю тому что мне говорит GetCurrentThreadID
sniknik (2010-02-19 09:26:00) [16]> оба сервера (фтп и шттп) - наследники tidtcpserver
> так что все там нормально с нитками.
sniknik © (18.02.10 20:45) [15]
>> не все так просто...
> во всяком случае с http нужен шедулер. а с ftp не связывался.
> одна новая настоящая нитка.
а выполнение пользовательского кода может идти в синхронизации
p.s. если и там все так хорошо и в проге правильно откуда проблемы? голову собеседникам поморочить? раз все работает, не парьте моск.
Медвежонок Пятачок (2010-02-19 08:42:00) [17]оба сервера (фтп и шттп) - наследники tidtcpserver
так что все там нормально с нитками. каждое подключение - одна новая настоящая нитка.
sniknik (2010-02-19 07:50:00) [18]только одно слово - Synchronize, которое ты проигнорировал, если вообще читал ссылку и 2-й пост.
> если собрались спорить
да ну тебя нафиг. спорить еще с тобой.
Zalm (2010-02-19 02:17:00) [19]В режиме дебага смотрите что происходит.
При подключении клиента ВСЕГДА запускается новый поток, при отключении ВСЕГДА уничтожается поток, если собрались спорить, то спорьте с дебагером D2009, я говорю то что он показывает
sniknik (2010-02-18 23:20:00) [20]насчет обязательности потоков, 2-й пост (понимаю что не совсем то, но как прецедент)
http://xayam.kilkennycat.ru/view/6-1189799328