您的位置:首页 > 职场人生

perl socket传hash(use Storable)

2011-06-18 14:10 381 查看
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(<$lsocket>){

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(<$tmpsocket>){

my $colref3 = thaw($_);

print Dumper $colref3;

}

$tmpsocket->shutdown(1);

print "end print\n";

}

-------

结果:

[root@localhost socket]# 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模块,很简单,还可以处理中文字符问题
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  职场 socket hash