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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не правильно работает ф-я connect, Socket 
:(
    Опции темы
FunkyBoy
Дата 23.11.2009, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Есть такой скрипт:

Код

#!/usr/local/bin/perl -w


print "Content-Type: text/html\n\n";

my $addr = '4.88.167.248:10000';
(my $host, my $port) = split( /:/, $addr ); # Разделяем адрес на хост и порт


print "Соединяемся с $addr при помощи модуля IO::Socket<br>";
use IO::Socket; #Используем модуль IO::Socket

my $conn = IO::Socket::INET->new($addr);

if ($conn) {print "Удачное соединение<br>"}
else {print "Не удалось соединиться<br>"}

close $conn;
sleep 1;

print "Соединяемся с $addr при помощи модуля Socket<br>";
use Socket; #Используем модуль Socket
my $tcp = 6;
my $socket_addr = sockaddr_in( $port, inet_aton($host) ); # адрес сокета
socket( my $sock, AF_INET, SOCK_STREAM, $tcp ); # Создаём сокет
if ( connect( $sock, $socket_addr) ) {$result = 'Удачное соединение'}
else {$result = 'Не удалось соединиться'}
print "$addr $result";
close $sock;
sleep 5;


Проблема в следующем: Независимо от того к какому адресу подключаться функция connect всегда возвращает истину, даже если соединиться не получилось.
Кто-нибудь сталкивался с таким? в чём может быть проблема?

PS: Скрипт запускаю у себя на локальной машине ( Perl-5.8.9 )

Это сообщение отредактировал(а) FunkyBoy - 23.11.2009, 20:30
PM MAIL   Вверх
Itsys
Дата 23.11.2009, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

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



А в документацию заглянуть?
Код

$sock = IO::Socket::INET->new(PeerPort  => 9999,
                                 PeerAddr  => inet_ntoa(INADDR_BROADCAST),
                                 Proto     => udp,    
                                 LocalAddr => 'localhost',
                                 Broadcast => 1 ) 
                             or die "Can't bind : $@\n";


Это сообщение отредактировал(а) Itsys - 23.11.2009, 15:51
PM MAIL WWW Skype   Вверх
shamber
Дата 23.11.2009, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Itsys, его 
Код

if ( connect( $sock, $socket_addr) ) {$proxy_type = 'Удачное соединение'}

как мне кажется вот это смущает....
PM MAIL Jabber   Вверх
FunkyBoy
Дата 23.11.2009, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Itsys @ 23.11.2009,  15:49)
А в документацию заглянуть?
Код

$sock = IO::Socket::INET->new(PeerPort  => 9999,
                                 PeerAddr  => inet_ntoa(INADDR_BROADCAST),
                                 Proto     => udp,    
                                 LocalAddr => 'localhost',
                                 Broadcast => 1 ) 
                             or die "Can't bind : $@\n";

Извиняюсь не правильно написал, там должно быть: my $conn = IO::Socket::INET->new($addr);

Это сообщение отредактировал(а) FunkyBoy - 23.11.2009, 16:01
PM MAIL   Вверх
Itsys
Дата 23.11.2009, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

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



shamber, ну если так, то сюда
PM MAIL WWW Skype   Вверх
FunkyBoy
Дата 23.11.2009, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Itsys @ 23.11.2009,  16:17)
shamber, ну если так, то сюда

Спасибо за ссылку, 
Переделал скрипт как на писано там: 
Код

#!/usr/local/bin/perl -w

print "Content-Type: text/html\n\n";
print "Соединяемся при помощи модуля Socket<br>";
use Socket; #Используем модуль Socket

$port = 10000;
$host = "4.88.167.248";
socket( SOCKET, PF_INET, SOCK_STREAM, (getprotobyname('tcp'))[2]); # Создаём сокет
if (connect( SOCKET, pack( 'Sn4x8', AF_INET , $port, $host ))) {$result = 'Удачное соединение'}
else {$result = 'Не удалось соединиться'}
print "$result";
close SOCKET;

так он даже не пытается соединиться с сервером.
В логах следующая ошибка: Argument "4.88.167.248" isn't numeric in pack.

По идее следующий скрипт должен работать, и в случае неудачного соединения должен выдавать "Не удалось соединиться":
Код

#!/usr/local/bin/perl -w

print "Content-Type: text/html\n\n";
print "Соединяемся при помощи модуля Socket<br>";
use Socket; #Используем модуль Socket

$port = 10000;
$host = "4.88.167.248";
socket( SOCKET, PF_INET, SOCK_STREAM, (getprotobyname('tcp'))); # Создаём сокет
my $socket_addr = sockaddr_in( $port, inet_aton($host) ); # адрес сокета
if (connect( SOCKET, $socket_addr)) {$result = 'Удачное соединение'}
else {$result = 'Не удалось соединиться'}
print "$result";
close SOCKET;

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


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

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


 




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


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

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