当数据长度未知时,从Perl中的套接字接收数据的最佳方法是什么?

Gal*_*man 4 sockets perl recv

现在,我在循环中一次读取一个角色,直到我到达\0角色.有一个更好的方法吗?

MkV*_*MkV 6

将行结束设置为\x{00}(\ 0),确保将其本地化,并getline在句柄上,如下所示:

{
    local $/ = "\x{00}";
    while (my $line = $sock->getline) {
       print "$line\n"; # do whatever with your data here
   }
}
Run Code Online (Sandbox Code Playgroud)


Sha*_*rog 2

当数据长度未知时,从 Perl 中的套接字接收数据的最佳方法是什么?

对于任何语言来说,解决这个问题都是不可能的。如果您不知道数据长度有多长,那么您就不可能知道何时从套接字接收完所有数据。

您唯一的希望是使用某种指标来确定自数据开始进入以来是否“足够长”,以做出数据流已停止的决定。但它不会是完美的。

  • 只要您*确定*知道该字符不能作为数据流的一部分发送,那么它的功能就像数据结束标记一样,在这种情况下您不需要知道数据长度。在这种情况下,您的解决方案是有效的。 (2认同)