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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> нужна помощь SOCKETS PERL 
:(
    Опции темы
harakiry
Дата 30.4.2007, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Написал скрипт который должен конектится к одному серверу по определённому порту, если не удаётся это сделать, то создаётся новый сокет и он пытается это сделать по другому порту к тому же серверу.

Код

#!perl.exe
use strict;
use Socket qw(:DEFAULT :crlf);
use NET::Ping;
use IO::Socket;

my ($serv_for_get_serv, $port_for_get_serv, $serv_for_get_serv_2, $port_for_get_serv_2) = ('mrim.mail.ru', 2042, 'mrim.mail.ru', 443);
my ($serv_for_connect, $port_for_connect);


sub connect1{

    my $sock;
        if($sock = new IO::Socket::INET->new(    
                                            PeerAddr  => $serv_for_get_serv,
                                            PeerPort  => $port_for_get_serv,
                                            PeerProto => 'tcp',
                                            TimeOut   => 5,
                                            ))
        
                {
                my $result='';
                read($sock, $result, 18);
                if($result=~m/(.+):(.+)/){} else{print "Content-type:r text/plain\n\nERROR:1" and exit(1);}
                ($serv_for_connect, $port_for_connect) = ($1, $2);
                send_result();
                }
        else
                {
                            my $sock2;
                            if($sock2 = new IO::Socket::INET->new(    
                                            PeerAddr  => $serv_for_get_serv_2,
                                            PeerPort  => $port_for_get_serv_2,
                                            PeerProto => 'tcp',
                                            TimeOut   => 2,
                                            ))
                            {
                                my $result='';
                                read($sock2, $result, 18);

                                if($result=~m/(.+):(.+)/){} else{print "Content-type:r text/plain\n\nERROR:2" and exit(1);}
                                ($serv_for_connect, $port_for_connect) = ($1, $2);
                                send_result();
                            }
                }
    }


sub send_result
    {
        print "Content-type:r text/xml\n\n";
        print '<?xml version="l.0"?>';
        print '<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">';
        print '<cross-domain-policy>';
        print '<allow-access-from domain="' . $serv_for_connect . '" to-ports="' . $port_for_connect . '"/>';
        print '</cross-domain-policy>';
        exit(0);
    }
    
    
connect1();



Но получается то что попробовав приконектится по порту 2042, он не пытается приконектится к 443(смотрел сканером) и принтует ERROR2, как-будто приконектился и скачал данные, которые проверяются по шаблону и не подходят из-за чего и выводится ERROR 2, хотя по идее в случае неудачных коннектов и несоответствия шаблону не должно ничего выводится.

Помогите чайнику

Это сообщение отредактировал(а) harakiry - 30.4.2007, 22:01
PM MAIL   Вверх
KSURi
Дата 1.5.2007, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ну ессесно... У тя 1 коннект находится в if, а 2 в else.
Выполнится или 1, или 2. Иначе никак.


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
Nab
Дата 1.5.2007, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ну мужики, вам нужно быть обоим повнимательней smile
KSURi, с IF у него все в порядке, у него думаю затык в другом месте, а именно 
Код

new IO::Socket::INET->new( 

Нафига два new? Видно писал на автомате smile совсем не думаючи... smile а собственного стиля еще не выработал smile
оставить один из них, в обоих условиях...

Я к примеру никогда не пользую new перед именем пакета, обыкновенно PACKAGE->new пишу smile
Но эт на любителя smile


--------------------
 Чтобы правильно задать вопрос нужно знать больше половины ответа...
Perl Community 
FREESCO in Ukraine 
PM MAIL   Вверх
KSURi
Дата 1.5.2007, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



C new проблем нет. Perl съедает эту конструкцию)
Код

C:\>perl -MIO::Socket -e "$s = new IO::Socket::INET->new(PeerAddr => 'ya.ru',PeerPort=>80) || die $!"

C:\>




--------------------
Died at Life.pl line 21
PM Jabber   Вверх
harakiry
Дата 2.5.2007, 04:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я сейчас кое-что скажу только сразу не убивайте smile 

Изначально в скрипте первым для коннекта поселился порт 2042 и вот после всех мытарств решил первым попробовать коннект к 443-у (коннекты само собой шли при выключенном M$ фаервол агенте, чтобы проверить будет ли реконнект в случае неудачи) скрипт даже не пытался этого сделать, а сразу завершил работу, что очень странно потому что при включённом M$ фаервол агенте скрипт спокойно конектился к этому порту и скачивал то что нужно.

Вобщем при выключенном M$ фаервол агенте и заменой 443 порта на другой, скрипт пытается приконектится к двум разным портам.

Всем спасибо.


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


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

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


 




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


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

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