Проблема с сокетами(новичок)

  • Автор темы dex157
  • Дата начала
D

dex157

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


[codebox]#!/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";[/codebox]
и на выходе

[codebox]C:\Perl>1.pl
host=localhost port=7, protocol=6
connect die coz: Unknown error[/codebox]

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

Vovochka

#2
my $port=shift || getservbyname('echo','tcp');

Ну не может он на 7ой порт законектиться. Попробуй приконектиться к ya.ru на 80 порт.
И вообще, юзай лучше IO::Socket
 
D

dex157

#3
всё, спасиб, аазобрался..)) А такой вопрос, можно ли вообще не использовать IO::Socket и тому подобные, а просто выдерать из модулей нужный код..? Оправдывает ли себя такой подход..? )
 
V

Vovochka

#4
Не оправдает. Ибо не нужен.
Люди специально старались сделать тебе жизнь легче, писали хитроумные модули...
Дак зачем же отказываться от этих благ?

+ Если кто-то будет поддерживать твой код после тебя, ему будет гораздо проще почитать доку по моудлю, чем разбираться с тем, что ты там понакопировал.