Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: нужна помощь по Socket Perl
Форум программистов > Системное программирование > Другие
harakiry
Написал скрипт который должен конектится к одному серверу по определённому порту, если не удаётся это сделать, то создаётся новый сокет и он пытается это сделать по другому порту к тому же серверу.

#!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
проблема решена
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2008 IPS, Inc.