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

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

Проблемы с ASender.Thread.Connection в Indy 9 [D7, Win95/98, WinME, NT4, Win2k, WinXP]


samael6 ©   (2007-06-05 21:29:00) 

Такая проблема: у меня почтовый сервер и все нормально, если не отсылать клиенту большие письма :)
Полностью они до него не доходят. Я отправляю все письмо по строчно, и многие строки теряются. Но если сделать задержку после каждой посылки, то все дойдет.
Вот код:

ASender.Thread.Connection.WriteLn('+OK ' + IntToStr(intSize) + ' octets');
for i := 0 to MessageStrings.Count - 1 do begin
   ASender.Thread.Connection.Writeln(MessageStrings.Strings[i]);
end;

где, intSize - integer: размер письма;
     MessageStrings - TStrings: само письмо построчно.
Если в тело цикла вставить sleep(1), то все пойдет, но слишком медленно.

Что я не учел?
Спасибо


Samael6   (2007-06-08 19:21:00) [1]

9 (см. тему ветки)


Сергей М.   (2007-06-08 16:28:00) [2]

Т.е. ты утверждаешь, что если чуть подправить демо-проект в части отправки твоих "крупных" писем, то возникает та же самая проблема ?

А версия Инди какая ?


Samael6   (2007-06-08 14:54:00) [3]

Он практически пустой. Только немного комментария и построчная отправка простого письма клиенту. У меня все тоже самое, но письма не такие мелкие...


Сергей М.   (2007-06-08 14:06:00) [4]


> Samael6 ©   (08.06.07 13:51) [10]


Ну есть же демо-проект в составе Инди с использованием поп3-сервера, почему не сравнить его со своим ?


Samael6   (2007-06-08 13:51:00) [5]

Так в чем же тогда трабла?
Может клиент не готов к приему письма построчно и ему нужно передавать блоково? Аля, сначала хидер, затем боди и никак иначе?
Возможно ли такое? Или проблема в другом?


Сергей М.   (2007-06-08 08:25:00) [6]


> Samael6 ©   (07.06.07 19:59) [8]


> буфер сокета не успевает отчищаться (выгребаться), и следовательно
> происходит перезатирание предыдущего значения


Ерунда полнейшая.
Инди использует синхронный транспортный режим.
А подобного рода засада может поджидать только в асинхронном режиме.


> Может как-то можно определить, произошло ли чтение из сокета
> и готов ли он уже к новой порции данных?


На прикладном уровне нельзя.
Да и не нужно это.
Потому что TCP - поточный протокол.


Samael6   (2007-06-07 19:59:00) [7]

Закономерности ворде нет, похоже что буфер сокета не успевает отчищаться (выгребаться), и следовательно происходит перезатирание предыдущего значения.
По крайней мере так оно смотрится, а лечение путем задержки это только подтверждает.
Может как-то можно определить, произошло ли чтение из сокета и готов ли он уже к новой порции данных?


Сергей М.   (2007-06-07 16:26:00) [8]


> многие строки теряются


"Многие" - это какие ?

Какова закономерность ?


Samael6   (2007-06-07 16:25:00) [9]

Нет,
это разные ветки и разные проблемы с разными программами


Сергей М.   (2007-06-07 12:53:00) [10]


> Клиент - The Bat!


А здесь

http://www.delphimaster.ru/cgi-bin/forum.pl?id=1181070583&n=4

ты почему-то ведешь речь о собственном клиенте ..


Samael6   (2007-06-06 16:56:00) [11]

Клиент - The Bat!


Сергей М.   (2007-06-06 14:37:00) [12]


> Полностью они до него не доходят


Показывай как принимаешь письма на стороне клиента ..


Samael6   (2007-06-06 13:23:00) [13]

Да, именно через него я это и делаю.
Из-под обработчика OnRETR.


Сергей М.   (2007-06-06 08:12:00) [14]


> samael6 ©   (05.06.07 21:29)


В чем прелесть изобретения велосипеда ?
Ведь есть же готовыйкомпонент - TIdPOP3Server ..


Наверх

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