http://www.perlmonks.org?node_id=1003521


in reply to Passing hash reference over tcp client/server

Hi newbio,

I then try to print the content of the hash

To do that,
change this: print "Received from Server : $data1\n";
to this:

print "Received from Server :", %$data1, $/; # OR print "Received from Server :", Dumper($data1), $/;
in your tcpclient.pl script

However, there appears some error in my programs
What are the errors?

and the client does not print the output and simply hangs on its terminal.
The terminal didn't hang, from the server.pl, remove the endless while loop, you should have your output.

Below: please check the changes made to the OP scripts:
#tcpserver.pl #!/usr/bin/perl use strict; use warnings; use IO::Socket::INET; use Storable qw(nfreeze); $| = 1; my ( $socket, $clientsocket ); my ( $peeraddress, $peerport ); my $data; my $line; my $inputfile = "list.txt"; my %names = (); my $reftohash; open my $fh, '<', $inputfile or die "can't open file: $!"; # read f +ile while ( $line = <$fh> ) { chomp $line; $names{$line} = 1; } close $fh or die "can't close file: $!"; #set hash reference $reftohash = \%names; $socket = new IO::Socket::INET( LocalHost => 'localhost', LocalPort => '5000', Proto => 'tcp', Listen => 5, Reuse => 1 ) or die "ERROR in Socket Creation : $!\n"; #while(1) { $clientsocket = $socket->accept(); print $clientsocket nfreeze($reftohash); #} $socket->close();
#tcpclient.pl #!/usr/bin/perl use strict; use warnings; use Data::Dumper; use IO::Socket::INET; use Storable qw(thaw); $| = 1; my $socket; my $data; my $data1; $socket = new IO::Socket::INET( PeerHost => 'localhost', PeerPort => '5000', Proto => 'tcp', ) or die "ERROR in Socket Creation : $!\n"; $data = <$socket>; $data1 = thaw($data); print "Received from Server :", Dumper($data1), $/; # OR %$data1 foreach my $i ( keys %{$data1} ) { print "$i=>$data1->{$i}\n"; } $socket->close();
Update: graff thanks for the eagle eye!

If you tell me, I'll forget.
If you show me, I'll remember.
if you involve me, I'll understand.
--- Author unknown to me

Replies are listed 'Best First'.
Re^2: Passing hash reference over tcp client/server
by graff (Chancellor) on Nov 12, 2012 at 23:51 UTC
    Actually, since the OP is using Data::Dumper, it would be better to change to this:
    print "Received from Server :\n", Dumper( $data1 );
Re^2: Passing hash reference over tcp client/server
by newbio (Beadle) on Nov 13, 2012 at 14:42 UTC
    Thank you very much 2teez for your suggestion. When I run the client, the program now produces the desired results. However, the problem now is that upon successful client execution, the server program also exits. What I need is that the server program remains persistent in memory and keeps serving multiple client requests that it might receive. Any suggestion? Thanks again!
      Um, if you're using the served code snippet as posted by 2teez, did you happen to uncomment these lines?
      #while (1) { ... #}