【问题标题】:Perl socket connectionPerl 套接字连接
【发布时间】:2011-06-28 13:44:11
【问题描述】:

是否可以在终端设备上创建一个开放端口的套接字连接。

如果连接断开打印一些东西?

我见过一些例子,但它们需要一个服务器类型的脚本和一个客户端,只是在寻找一个客户端。

谢谢

【问题讨论】:

  • 例如,如果我说连接到端口 23,telnet 服务器会停止工作吗?我刚刚用端口 80 测试了这个东西,脚本在我杀死它后正在运行......

标签: perl sockets


【解决方案1】:

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-&gt;new 的有效返回吗?好像不会。
  • @Axeman,不。构造函数应始终返回 true。 || 就够了。
【解决方案2】:

【讨论】:

  • 我是Socket::Class 的粉丝,那里的界面不是那么巴洛克式。
  • Perl,像往常一样 TMTOWTDI ;)
【解决方案3】:

这可能会满足您的需求:

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 );
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 2011-08-11
    • 2013-09-18
    • 2012-02-27
    相关资源
    最近更新 更多