2011-06-28 57 views
2

是否可以创建到终端设备上的打开端口的套接字连接。Perl套接字连接

如果连接丢失打印什么东西?

我已经看到了一些例子,但他们需要服务器类型的脚本和客户端,只是在寻找一个客户端。

感谢

+0

,将Telnet服务器停止工作?我刚刚用80端口测试了这个sokething,并且脚本在我杀死它后运行... – mrlayance

回答

6

Perl有内置到它的插座。你只需要加载标准的Socket.pm模块来获得你需要的常量。

perlipc手册页告诉你所有关于这一点。然而,有许多更高级的模块比内置模块更容易获得。有些甚至是标准的。

这里有一个CLI例如:

% perl -MIO::Socket::INET -E '$him = new IO::Socket::INET "localhost:daytime" // die; print while <$him>' 
Tue Jun 28 08:17:13 2011 
+0

从'IO :: Socket :: INET-> new'有效返回'0'吗?看起来好像不会。 – Axeman

+0

@Axeman,不。构造函数应该总是返回true。 '||'就够了。 – tchrist

0

这方面的一个变化可能适合你的需要:如果我说连接到端口23例如

use strict; 
use warnings; 
use constant 
    { SOCKET_ERROR_MESSAGE => 'Some socket error message right here!' 
    , YOU_WANT_TO   => 1 
    }; 

use IO::Select; 
use IO::Socket::INET; 

@ARGV = qw<server.domain.tld 8080> unless @ARGV; 

sub handle_server_message { 
    ... 
} 

my $sel 
    = IO::Select->new(
     IO::Socket::INET->new( 
     PeerAddr => shift 
    , PeerPort => shift 
    )); 

# block until the server sends something that can be read. 
while (my ($sock) = $sel->can_read) { 
    # you could just do this with $sock->eof... 
    if ($sock->error and $sock->eof) { 
     die MY_ERROR_MESSAGE if YOU_WANT_TO; 
     print MY_ERROR_MESSAGE; 
    } 
    else { 
     handle_server_message($sock); 
    } 
}