perl socket传hash(use Storable)
cpan关于Storable的例子use Storable qw(store retrieve freeze thaw dclone);
%color = ('Blue' => 0.1, 'Red' => 0.8, 'Black' => 0, 'White' => 1);
store(\%color, 'mycolors') or die "Can't store %a in mycolors!\n";
$colref = retrieve('mycolors');
die "Unable to retrieve from mycolors!\n" unless defined $colref;
printf "Blue is still %lf\n", $colref->{'Blue'};
$colref2 = dclone(\%color);
$str = freeze(\%color);
printf "Serialization of %%color is %d bytes long.\n", length($str);
$colref3 = thaw($str);
用在socket上
client:
#!/usr/bin/perl
use strict;
use IO::Socket;
use Data::Dumper;
use Storable qw(store retrieve freeze thaw dclone);
my $lsocket=&nsock;
my %color = ('Blue' => 0.1, 'Red' => 0.8, 'Black' => 0, 'White' => 1);
my $str = freeze(\%color);
print $lsocket $str;
$lsocket->shutdown(1);
while(){
print "$_";
}
sub nsock(){
return IO::Socket::INET->new(
PeerAddr=>'127.0.0.1',
PeerPort=>'4321',
Proto=>'tcp',
);
}
-----
server端
#!/usr/bin/perl
use strict;
use IO::Socket;
use Data::Dumper;
use Storable qw(store retrieve freeze thaw dclone);
my $lsocket=IO::Socket::INET->new(
LocalAddr=>'127.0.0.1',
LocalPort=>'4321',
Listen=>SOMAXCONN,
Proto=>'tcp',
Reuse=>1,
Timeout=>30,
);
#=cut
while(1){
my $tmpsocket = $lsocket->accept;
next unless defined($tmpsocket);
while(){
my $colref3 = thaw($_);
print Dumper $colref3;
}
$tmpsocket->shutdown(1);
print "end print\n";
}
-------
结果:
# perl server.pl
$VAR1 = {
'Red' => '0.8',
'Blue' => '0.1',
'Black' => 0,
'White' => 1
};
end print
linux-windows socket传中文字符会出现乱码
今天使用storable又发现一个问题,不知道是不是我哪里出错了
问题描述
my %color = ('Blue' => ‘aa’, 'Red' => 0.8, 'Black' => 0, 'White'=> 1);
传这样的hash socket另一端解析不了。
建议使用JSON模块,很简单,还可以处理中文字符问题
页:
[1]