Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Системное программирование > POP3 клиент на Socket


Автор: GShadrin 18.9.2009, 18:31
Здравствуйте.
Хочу написать поп3 клиент на перле.

Код

use Socket;

sub printerror #выводит ошибки
{
    warn "$_[0]\n";
}

socket(POP3_SOCK, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
# Конвертирует имя сервера в бинарную последовательность.
$iaddr = inet_aton($ARGV[0]);
$port=110;
# Упаковывает все в понятную функции connect последовательность.
$paddr = sockaddr_in($port, $iaddr);
connect(POP3_SOCK, $paddr);

send (POP3_SOCK, 'privet', 0);
@data=<POP3_SOCK>;
print @data;

$com="USER ".$ARGV[1];


send (POP3_SOCK, $com, 0);
@data=<POP3_SOCK>;

print @data;
if (substr($data[0],0,3) ne '+OK')
{
    printerror "Ne verniy login";
}



close(POP3_SOCK);


По идее от сервера должны прийти приветствие и результат проверки логина

Но приходит приходит только приветствие:
Z:\Новая папка\perl\pop3>perl pop3.pl pop.yandex.ru g-shadrin
+OK POP Ya! v1.0na #очевидно приветствие

Z:\Новая папка\perl\pop3>


Почему?

Автор: shamber 20.9.2009, 19:47
GShadrin, у яндекса спросить(rfc рулит)?

Добавлено @ 19:48
а почему не хотите посмотреть готовый модуль для работы с pop3?

Автор: KSURi 20.9.2009, 20:10
Цитата(GShadrin @  18.9.2009,  18:31 Найти цитируемый пост)
send (POP3_SOCK, 'privet', 0);

А это что? В протоколе такого нет

Автор: FooBar 23.9.2009, 04:38
GShadrin, читать нужно в строку, а не в массив. при чтении в массив скрипт висит до тех пор пока сервер не закроет соединение из за неактивности, после чего и печатается только приветствие.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)