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:
尝试使用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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |