【问题标题】:array of sockets in perlperl 中的套接字数组
【发布时间】:2014-10-09 09:25:21
【问题描述】:

我想在 perl 中做一个套接字数组并添加一个\n,在每个套接字的末尾,我尝试使用&socket[0],但它不起作用。

my @socket1;
$socket1[0] = IO::Socket::INET->new(
    Type     => SOCK_STREAM,
    PeerAddr => "127.0.0.1",
    Proto    => "tcp",
    PeerPort => $dbase_param{camera_stream}
) or die "Cannot open socket on port " . $dbase_param{camera_stream} . ".\n";

print $socket1[0] "\n";

当我执行print $socket1[0] "\n"; 时,它不会编译。

但如果我不使用数组,它可以工作:

my $socket1;
$socket1 = IO::Socket::INET->new(
    Type     => SOCK_STREAM,
    PeerAddr => "127.0.0.1",
    Proto    => "tcp",
    PeerPort => $dbase_param{camera_stream}
) or die "Cannot open socket on port " . $dbase_param{camera_stream} . ".\n";

print $socket1 "\n";

【问题讨论】:

  • @cppcoder 不,因为如果我这样做print $socket1[0]."\n";,它将打印socket1[0],然后是"\n",但我想在套接字中添加"\n"。
  • 次要注意:我建议不要在die 消息的末尾添加换行符\n,因为这会隐藏行号信息。

标签: arrays perl sockets


【解决方案1】:

print 的文件句柄必须是一个 glob 或一个简单的标量(可能是 BLOCK 的结果)。这应该有效:

print { $socket1[1] } "\n";

【讨论】:

    【解决方案2】:

    试试下面的语法:

    $socket1[0]->print("\n");
    

    【讨论】:

    • 用作IO::Handle 子类总是比奇怪的间接对象语法更好
    【解决方案3】:

    您也可以使用syswrite() 或send()。此外,这是更推荐使用套接字的接口,因为此函数不使用缓冲。由于您使用的是 IO::Socket::INET 对象,所有这些函数都可以作为方法使用

    $socket[1]->print("\n");
    $socket[1]->syswrite("\n");
    $socket[1]->send("\n");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-11
      • 2010-11-06
      • 1970-01-01
      • 1970-01-01
      • 2014-02-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多