我必须在套接字上发送一个哈希值.这是我正在使用的一段代码.
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 "3\n"; 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.
总结以上是内存溢出为你收集整理的Perl套接字发送哈希全部内容,希望文章能够帮你解决Perl套接字发送哈希所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)