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
|