加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl套接字发送哈希

发布时间:2020-12-16 06:06:39 所属栏目:大数据 来源:网络整理
导读:我试图在Perl中创建一个套接字客户端.服务器端是在本地主机上运行的C程序. 我必须在套接字上发送一个哈希值.这是我正在使用的一段代码. sub applyGlobalConfig { my ($globalConfig,$ignoreData) = @_; my $socket = IO::Socket::INET-new(PeerAddr = $PEER_
我试图在Perl中创建一个套接字客户端.服务器端是在本地主机上运行的C程序.

我必须在套接字上发送一个哈希值.这是我正在使用的一段代码.

sub applyGlobalConfig {
    my ($globalConfig,$ignoreData) = @_;

    my $socket = IO::Socket::INET->new(PeerAddr => $PEER_HOST,PeerPort => $PEER_PORT,Proto    => "tcp",Type     => SOCK_STREAM)
          or die "Couldn't connect to $PEER_HOST:$PEER_PORT : $@n";

    my $reconfigResult;

    print $socket "$113n";

    close($socket);

    unless ($reconfigResult) {
        return 0;
    }

    return ERR_NULL;
}

现在,问题是,$globalConfig将包含一个哈希引用,我想通过套接字发送它.我无法弄清楚.我用Google搜索并发现了一些对Dumper的引用,但不太了解.如何发送哈希?

解决方法

我更喜欢使用 Storable模块.例:

接收端:

use strict;
use IO::Socket::INET;
use Storable;
use Data::Dumper;

my   $sock = IO::Socket::INET->new(Listen    => 5,LocalAddr => 'host',LocalPort => 9000,Proto     => 'tcp');
while( my $s = $sock->accept ) {
    my $struct = Storable::fd_retrieve($s);
    print Dumper($struct);
}

发送端:

use strict;
use IO::Socket::INET;
use Storable;

my   $sock = IO::Socket::INET->new(PeerAddr => 'host',PeerPort => 9000,Type     => SOCK_STREAM,Proto     => 'tcp') || die "Fail: $!";
my $struct = {
    a => 1,b => [2,3,4]
};
Storable::nstore_fd($struct,$sock);

通过从i386 Linux发送到amd64 FreeBSD进行测试.

你也可以使用Data :: Dumper从哈希中创建字符串,然后通过网络发送它的脏和错误的方法.

UPD:

But,I am struggling how to convert the values in the hash on perl side to a string separated by space.

尝试使用join / map组合:

my $serialized = join("n",map { "$_ ".$struct->{$_} } keys %$struct)."n";

可能在C端,它更容易使用以null结尾的字符串:

my $keyvalue_count = scalar keys(%$struct);
my $serialized = join("",map { "$_".$struct->{$_} } keys %$struct)."";

在这个简单的情况下,我更喜欢使用最后一个变体,因为它原生于C.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读