Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблемы с сокетами(новичок)  (Прочитано 7353 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
dex157
Гость
« : 17-01-2009 10:55 » 

Всем привет..) в общем просто опишу программу и что она выдаёт..))

Код:
#!/perl/bin/perl -w
use strict;
use Socket;
use IO::Handle;
my ($bytes_out,$bytes_in)=(0,0);
my $host=shift || 'localhost';
print "host=$host ";
my $port=shift || getservbyname('echo','tcp');
my $protocol=getprotobyname('tcp');
$host=inet_aton($host) or die "host problem";
socket(SOCK,AF_INET,SOCK_STREAM,$protocol) or die "socket:$!";
my $dest_addr=sockaddr_in($port,$host);
print "port=$port, protocol=$protocol\n";
connect (SOCK,$dest_addr) or die "connect die coz: $!\n";
SOCK->autoflush(1);
while (my $msg_out=<>){
print SOCK $msg_out;
my $msg_in=<SOCK>;
print $msg_in;
$bytes_out +=length($msg_out);
$bytes_in +=length($msg_in);
}
close SOCK;
print STDERR "bytes_sent=$bytes_out, bytes_recived = $bytes_in\n";
и на  выходе
Код:
C:\Perl>1.pl
host=localhost port=7, protocol=6
connect die coz: Unknown error

Пишу под windowsXP, этот пример просто из учебника, потому что пока изучаю перл, тестил его на linux backtrack так же, пример не работает, проверил установленные пакеты, и там и там в принципе все что нужно стоит, помогите пожалуйста с проблемой, искал в инете подобного не нашёл..( заранее спасибо..
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 17-01-2009 11:30 » new

Логику не менял - только причезал для удобочитаемости.

Код:
#!/usr/bin/perl

use strict;
use Socket;
use IO::Handle;

my ($host, $port, $protocol, $dest_addr);

$host = shift || 'localhost';
print "host=$host ";
$host = inet_aton($host) or die "host problem";
$port = shift || getservbyname('echo', 'tcp');
$protocol = getprotobyname('tcp');
$dest_addr = sockaddr_in($port, $host);

print "port=$port, protocol=$protocol\n";
socket(SOCK, PF_INET, SOCK_STREAM, $protocol) or die "socket:$!";
connect (SOCK, $dest_addr) or die "connect die coz: $!\n";
SOCK->autoflush(1);
print "Connected to ", inet_ntoa($host), "\n";

my ($bytes_in, $bytes_out) = (0, 0);
my ($msg_in, $msg_out);

while ($msg_out = <>)
{
    print SOCK $msg_out;
    $msg_in = <SOCK>;
    print $msg_in;
    $bytes_out += length($msg_out);
    $bytes_in += length($msg_in);
}

close SOCK;

print "bytes_sent=$bytes_out, bytes_recived = $bytes_in\n";

Проверяем...

Код:
$ ./t3.pl
host=localhost port=7, protocol=6
connect die coz: Connection refused

И это нормально: сервис "echo" на нашем хосте отсутствует.

Код:
$ ./t3.pl pop.mail.ru 110
host=pop.mail.ru port=110, protocol=6
Connected to 194.67.23.102
USER xxxx@mail.ru
+OK
PASS xxxxxxxxxxxx
+OK Password required for user xxxx@mail.ru
LIST
+OK xxxx@mail.ru maildrop has 84 messages (5547008 octets)

+OK 84 messages (5547008 octets)
« Последнее редактирование: 19-01-2009 04:20 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
dex157
Гость
« Ответ #2 : 17-01-2009 13:04 » 

аааааа... спасибо большое.. что то я об этом совсем не подумал..) теперь понял.. спасибо большое ещё раз..)
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines