如何在perl中使用TCP协议检查recv()和send()的返回值?

时间:2016-08-03 12:21:56

标签: perl sockets tcp recv

我在Perl中使用client and server编写了示例TCP protocol程序。 所以我使用了send()recv()函数。 在那里我试图获得recv()函数的返回值。 示例代码是,

my $return_value;
 $return_value = recv($client_socket, $data, 50, 0);
 print "return value is: $return_value\n";

当我执行我的代码时,它不会打印任何值。 例如:

return value is:

之后我读了下面的链接,即使我没有得到任何返回值。 return value of recv() function in perl

我怎么解决这个问题?

感谢。

1 个答案:

答案 0 :(得分:3)

它可能是undef,表示发生错误 [1]

use Socket qw( unpack_sockaddr_in );

defined($return_value)
   or die("Can't recv: $!\n");

my ($peer_port, $peer_addr) = unpack_sockaddr_in($return_value);

您已经知道与之通信的对等方的地址和端口,因此这不是非常有用。这就提出了一个问题:为什么使用recv(而不是sysread)来连接像TCP这样的流媒体协议?你是否意识到你有时会得到少于你要求的50个字符?

  1. 始终使用use strict; use warnings 'all';!如果$return_value为undef,"return value is: $return_value\n"会发出警告。