Форум: "Сети";
Текущий архив: 2008.03.02;
Скачать: [xml.tar.bz2];
ВнизПроблемы с ASender.Thread.Connection в Indy 9 Найти похожие ветки
← →
samael6 © (2007-06-05 21:29) [0]Такая проблема: у меня почтовый сервер и все нормально, если не отсылать клиенту большие письма :)
Полностью они до него не доходят. Я отправляю все письмо по строчно, и многие строки теряются. Но если сделать задержку после каждой посылки, то все дойдет.
Вот код:
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), то все пойдет, но слишком медленно.
Что я не учел?
Спасибо
← →
Сергей М. © (2007-06-06 08:12) [1]
> samael6 © (05.06.07 21:29)
В чем прелесть изобретения велосипеда ?
Ведь есть же готовый компонент - TIdPOP3Server ..
← →
Samael6 © (2007-06-06 13:23) [2]Да, именно через него я это и делаю.
Из-под обработчика OnRETR.
← →
Сергей М. © (2007-06-06 14:37) [3]
> Полностью они до него не доходят
Показывай как принимаешь письма на стороне клиента ..
← →
Samael6 © (2007-06-06 16:56) [4]Клиент - The Bat!
← →
Сергей М. © (2007-06-07 12:53) [5]
> Клиент - The Bat!
А здесь
http://delphimaster.net/view/6-1181070583/
ты почему-то ведешь речь о собственном клиенте ..
← →
Samael6 © (2007-06-07 16:25) [6]Нет,
это разные ветки и разные проблемы с разными программами
← →
Сергей М. © (2007-06-07 16:26) [7]
> многие строки теряются
"Многие" - это какие ?
Какова закономерность ?
← →
Samael6 © (2007-06-07 19:59) [8]Закономерности ворде нет, похоже что буфер сокета не успевает отчищаться (выгребаться), и следовательно происходит перезатирание предыдущего значения.
По крайней мере так оно смотрится, а лечение путем задержки это только подтверждает.
Может как-то можно определить, произошло ли чтение из сокета и готов ли он уже к новой порции данных?
← →
Сергей М. © (2007-06-08 08:25) [9]
> Samael6 © (07.06.07 19:59) [8]
> буфер сокета не успевает отчищаться (выгребаться), и следовательно
> происходит перезатирание предыдущего значения
Ерунда полнейшая.
Инди использует синхронный транспортный режим.
А подобного рода засада может поджидать только в асинхронном режиме.
> Может как-то можно определить, произошло ли чтение из сокета
> и готов ли он уже к новой порции данных?
На прикладном уровне нельзя.
Да и не нужно это.
Потому что TCP - поточный протокол.
← →
Samael6 © (2007-06-08 13:51) [10]Так в чем же тогда трабла?
Может клиент не готов к приему письма построчно и ему нужно передавать блоково? Аля, сначала хидер, затем боди и никак иначе?
Возможно ли такое? Или проблема в другом?
← →
Сергей М. © (2007-06-08 14:06) [11]
> Samael6 © (08.06.07 13:51) [10]
Ну есть же демо-проект в составе Инди с использованием поп3-сервера, почему не сравнить его со своим ?
← →
Samael6 © (2007-06-08 14:54) [12]Он практически пустой. Только немного комментария и построчная отправка простого письма клиенту. У меня все тоже самое, но письма не такие мелкие...
← →
Сергей М. © (2007-06-08 16:28) [13]Т.е. ты утверждаешь, что если чуть подправить демо-проект в части отправки твоих "крупных" писем, то возникает та же самая проблема ?
А версия Инди какая ?
← →
Samael6 © (2007-06-08 19:21) [14]9 (см. тему ветки)
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2008.03.02;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.039 c