Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
-4 / 0 / 0
Регистрация: 13.11.2015
Сообщений: 488

Приходит не весь файл

16.01.2017, 23:46. Показов 1743. Ответов 34
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
отправка
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
var
    buf:Pointer;
    nRead:integer;  
 
 sfile:=TfileStream.Create(filepath,fmOpenRead);
     sfile.Position:=0;
     repeat
       try
         GetMem(buf,4000);
         nRead:=sfile.Read(buf^,4000);
         if nRead>0 then
           d:=d+ClientSocket2.Socket.SendBuf(buf^,nRead);
         Caption:=IntTOStr(d);
         Application.ProcessMessages;
       finally
         FreeMem(buf);
       end;
     until nRead <=0;
В чем может быть проблемма? Файл приходит то целиком, то бывает что нехватает пару тысяч байт. Пробовал делать Sleep перед отправкой и все равно не приходит. Код брал из исходника. Там почему-то все работает прекрасно.

Добавлено через 42 минуты
Надо немного уточнить. Так вот, данные то приходят, скорей проблема в методе отправки. У меня на caption отображается переданная информация. Точней сколько байтов мы уже передали. Бывает что файл передается не до конца. передача файла стопается где то на 95%. Но это не всегда. Бывает что передает весь файл целиком. Я не знаю что на это влияет
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.01.2017, 23:46
Ответы с готовыми решениями:

Как записать весь текст с TRichEdit одним значением в ini файл
Привет, как записать в *.ini файл одним значением все строки из TRichEdit, это возможно? помогите пожалуйста

Создать программу, создающую корректный HTML файл, содержащий весь текст из файла
Здравствуйте помогите реализовать задание в delphi! Имеется два входных файла (txt) – файл с текстом и файл словаря. Необходимо...

На FTP-сервер файл приходит искажённым
Через .bat идет отправка файла на ftp сервер. Файл на сервер приходит поврежденный. Где ошибка. Файл на компьютере нормальный. Пробовал...

34
-4 / 0 / 0
Регистрация: 13.11.2015
Сообщений: 488
20.01.2017, 14:21  [ТС]
Студворк — интернет-сервис помощи студентам
Delphi
1
2
3
4
5
6
7
var
s: TSocketThread;
begin
  s:= TSocketThread.Create(true);
  s.FreeOnTerminate:=true;
  s.Execute;
end;
А что там на щет проекта? много ошибок?
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
20.01.2017, 16:03
s.Execute - это выполнить процедуру Execute.
Естественно, в главном потоке как и все остальное.
Чтобы запустить поток нужно s.Resume

в проекте Server не нужны никакие потоки вообще.
в документации вроде подробно про эти компоненты расписано
думаю, что в SendStream всё должно работать

но это все в nonBlocking режиме
для использования потоков там есть отдельный Blocking режим, а там что-то намудрено, как что отправлять/принимать
а времени разбираться пока нет
как появится, поковыряюсь.
0
-4 / 0 / 0
Регистрация: 13.11.2015
Сообщений: 488
21.01.2017, 01:43  [ТС]
если отправить файл методом SendStream, то передачу нельзя будет остановить или преждевременно завершить.

Добавлено через 9 часов 27 минут
Теперь запускаю сервер так:
Delphi
1
2
3
  s:= TSocketThread.Create(true);
  s.FreeOnTerminate:=true;
  s.resume;
Изменил execute на resume. Если запускать поток через s.resume то события в моем случае ServerSocketClientRead и OnClientConnect не выполняются. Если запускать через s.Execute то все работает
0
пофигист широкого профиля
4770 / 3206 / 862
Регистрация: 15.07.2013
Сообщений: 18,613
21.01.2017, 02:13
Цитата Сообщение от Олег2000про Посмотреть сообщение
Изменил execute на resume. Если запускать поток через s.resume то события в моем случае ServerSocketClientRead и OnClientConnect не выполняются. Если запускать через s.Execute то все работает
Всё абсолютно естественно. События ServerSocketClientRead и OnClientConnect разработаны для асинхронного (неблокирующего) режима работы. В доппотоке они просто неуместны, потому и никогда не будут вызываться. (Разве что тебе удастся создать суперужастного монстра).
А запуск напрямую s.Execute выполняется в основном потоке приложения и все твои потуги по работе с доппотоками идут на север и лесом.
P,S. Даже не знаю что тебе посоветовать прочитать чтобы понять разницу между асинхронной(неблокирующей) и синхронной(блокирующей) работой с последовательными портами, к которым разумеется относятся и сокеты.
0
-4 / 0 / 0
Регистрация: 13.11.2015
Сообщений: 488
21.01.2017, 12:20  [ТС]
northener, мне нужно сделать что бы события формы ни как не влияли на прием данных. Т.к. если во время приема большого файла нажать и держать форму, прием остановится. В блокирующем режиме такого не будет?
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
21.01.2017, 16:09
да, там именно надо разбираться с блокирующим, но я пока не понял в чем фишка
0
 Аватар для Капитан Америка
8 / 8 / 4
Регистрация: 18.12.2016
Сообщений: 104
21.01.2017, 17:47
ну а менять то режимы не пробовали
0
-4 / 0 / 0
Регистрация: 13.11.2015
Сообщений: 488
21.01.2017, 21:48  [ТС]
вы про stThreadBlocking? там же все по другому. нужно заново разбираться. И еще в нете мало инфы по stThreadBlocking

Добавлено через 3 часа 30 минут
Сделал наследника класса TMemoryStream что бы отследить процесс передачи файла.
Delphi
1
2
3
4
TMyFileStream = class(TMemoryStream)
public
 function Read(var Buffer; Count: Longint): Longint; override;
end;
и
Delphi
1
2
3
4
5
function TMyFileStream.Read(var Buffer; Count: Longint): Longint;
begin
 result:=inherited Read(Buffer, Count);
 Form12.ProgressBar1.Position := Position;
end;
Вопрос: Как можно прежде временно завершить передачу файла?
krapotkin, вы мне когда-то писали:
'возможно, в обработчике прогресса написать Raise EAbort.create('');'
Я так и не разобрался где.. В процедуре TMyFileStream.Read?
0
 Аватар для Капитан Америка
8 / 8 / 4
Регистрация: 18.12.2016
Сообщений: 104
21.01.2017, 22:23
да, вызывай в риде исключение
0
-4 / 0 / 0
Регистрация: 13.11.2015
Сообщений: 488
21.01.2017, 22:32  [ТС]
Я немного не понял как. К примеру как его вызвать нажатием кнопки?
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
21.01.2017, 22:41
Это был совет для традиционного, неблокирующего варианта
1
-4 / 0 / 0
Регистрация: 13.11.2015
Сообщений: 488
21.01.2017, 22:57  [ТС]
так я его и использую
Цитата Сообщение от krapotkin Посмотреть сообщение
неблокирующего варианта
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
21.01.2017, 23:09
тогда в событии OnRead
1
-4 / 0 / 0
Регистрация: 13.11.2015
Сообщений: 488
26.01.2017, 22:08  [ТС]
Еще будет маленький вопрос.
Delphi
1
      ClientSocket1.Socket.Connect(1);
Вооот. Таким способом сокет тоже может подключится к серверу. Вопрос: что означает параметр в Connect(1)?
0
 Аватар для Капитан Америка
8 / 8 / 4
Регистрация: 18.12.2016
Сообщений: 104
26.01.2017, 23:54
коннект(хендл сокета)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.01.2017, 23:54

Не приходит файл на email обратная форма
Привет народ, такая проблема не приходит вложенный файл на емейл, приходит письмо но оно пустое в чем ошибка помогите решить проблему ...

Если НЕ прикрепить файл, то заявка НЕ приходит
Проблема такая, что не приходят заявки с сайта, если не прикрепить файл. Проблема появилась после работы программиста, задача которого была...

Файл приходит не целиком от клиента к клиенту
Привет. При отправке обычного текстового файла размером 3.50 КБ с первого пк на второй приходит текстовый файл размером 2.30 КБ. Помогите...

Большой файл приходит из 1C на web-сервер пустым
Здравствуйте! Автоматически отправляем файл с данными, созданный в 1С, web-серверу методом POST. Файл, содержащий примерно 6000...

Через какую команду можно очистить текстовой файл(полностью весь файл, кроме первых 3-х строк)
Через какую команду можно очистить текстовой файл(полностью весь файл, кроме первых 3-х строк) имя - test.txt


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
35
Ответ Создать тему
Новые блоги и статьи
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru