Модераторы: korob2001, ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> POP3 клиент, как правильно получать ответ 
:(
    Опции темы
kotkota23
Дата 26.9.2011, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 26.9.2011

Репутация: нет
Всего: нет





запускаю программу, выбираю функцию логин, ввожу всё, в ответ приходит
+OK
+OK Welcome!

а вот потом следует очень долгая пауза длинной в несколько минут и только потом заветное "end of sub", почему?
потом выбираю функцию stat, и мне выводится непонятное 234->5 и не выводится так нужное "stat"

Это сообщение отредактировал(а) kotkota23 - 11.10.2011, 09:29
PM MAIL   Вверх
shamber
Дата 26.9.2011, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: 17
Всего: 18



Цитата(kotkota23 @  26.9.2011,  09:47 Найти цитируемый пост)
долгая пауза длинной в несколько минут

вам не кажется что это таймаут?
PM MAIL Jabber   Вверх
kotkota23
Дата 26.9.2011, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 26.9.2011

Репутация: нет
Всего: нет



shamber, хм, а вышло время чего именно? как это исправить?
PM MAIL   Вверх
shamber
Дата 26.9.2011, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: 17
Всего: 18



Сервер не увидел от вас активности и отключился.
посмотрите код вот здесь
может мысли какие появятся.

Это сообщение отредактировал(а) shamber - 26.9.2011, 10:22
PM MAIL Jabber   Вверх
kotkota23
Дата 26.9.2011, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 26.9.2011

Репутация: нет
Всего: нет



Код

        while ($newdata) { my $tmp_data = ""; # читаем пока в сокете  хоть что-то есть...
            recv(Server, $tmp_data, $maxlen, $flags);
            if (!$tmp_data) { $newdata = 0; }
            $data_read .= $tmp_data;
            print $tmp_data;
        }


разве этот цикл работает до тех пор пока сервер не отключится? ведь $newdata в конце то концов станет пустой, а если эта переменная не пустая, то тогда должно что то выводиться на экран, разве я не прав?
PM MAIL   Вверх
ginnie
Дата 26.9.2011, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



kotkota23, добавьте warn time(); до и после recv(Server, $tmp_data, $maxlen, $flags); и увидите сколько раз вызывается эта функция и сколько она работает.

Добавлено через 8 минут и 51 секунду
kotkota23, у меня вот какой к Вам вопрос. Читаю rfc 1939:
Код

Commands in the POP3 consist of a case-insensitive keyword, possibly
followed by one or more arguments.  All commands are terminated by a
CRLF pair.

а у Вас я никаких CRLF не вижу после комманд. Почему?


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
kotkota23
Дата 26.9.2011, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 26.9.2011

Репутация: нет
Всего: нет



ginnie
у меня ощущение что вы намекаете на что то предельно простое, что тем не менее я предельно не понимаю)
запускается функция  recv(Server, $tmp_data, $maxlen, $flags);    6 раз
а значит что то внутри цикла тянет время, и я никак не могу понять что, и почему
PM MAIL   Вверх
ginnie
Дата 26.9.2011, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



А что она эти 6 раз возвращает? И по временным отметкам не видно, что его "тянет"?


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
kotkota23
Дата 26.9.2011, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 26.9.2011

Репутация: нет
Всего: нет



ginnie, не видно(
видимо дело не в этом цикле, ибо заменив на простое
Код

   while(<Server>) {
      print $_;
   }    

проблема осталась прежней
PM MAIL   Вверх
ginnie
Дата 26.9.2011, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



kotkota23, а зачем Вам вообще этот цикл? На первой итерации читается ответ сервера на PASS, а на второй итерации цикла читать нечего, поэтому происходит ожидание чтения до таймаута соединения с сервером. 


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
kotkota23
Дата 26.9.2011, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 26.9.2011

Репутация: нет
Всего: нет



ginnie, у мэйлру отчего то два ответа на PASS
один +OK и после него +OK Welcome!
как по вашему лучше организовать чтение?
PM MAIL   Вверх
ginnie
Дата 26.9.2011, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



kotkota23, а почему у меня работает не так? Вот моя сессия:

Код

telnet pop.mail.ru 110
Trying 94.100.184.74...
Connected to pop.mail.ru.
Escape character is '^]'.
+OK
user [email protected]
+OK
pass xxxxxxx
+OK Welcome!
quit
+OK POP3 server at mail.ru signing off
Connection closed by foreign host.



Это сообщение отредактировал(а) ginnie - 26.9.2011, 13:46


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
kotkota23
Дата 26.9.2011, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 26.9.2011

Репутация: нет
Всего: нет



решение найдено, я просто не учел что после коннекта одно сообщение приходит, тем самым каждый раз выводился "предыдущий" ответ

но второй вопрос всё еще актуален
почему ловится таймаут при выполнении этой функции?

Код

sub stats {
   print "stats\n";
   print Server "list";
   
   $answer= <Server>;
   print "-> $answer";
   
}

PM MAIL   Вверх
ginnie
Дата 26.9.2011, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



kotkota23, а добавление CRLF после команды ничего не меняет?

Это сообщение отредактировал(а) ginnie - 26.9.2011, 15:30


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
kotkota23
Дата 26.9.2011, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 26.9.2011

Репутация: нет
Всего: нет



ginnie, и впрямь, невнимательно RFC читал
а как CRLF выцепить из ответа сервера?
тоесть последний многострочный ответ это точка и два CRLF символа, как это цепануть?
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0649 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.