#!/usr/bin/perl -w use strict; use IO::Socket::INET; #-- #-- server.pl #-- my $server = IO::Socket::INET->new(Listen => 5, LocalAddr => 'localhost', LocalPort => 5050, Proto => 'tcp') || die $!; #-- have we receive the filename from the client yet? my $file = undef; while(my $client = $server->accept){ #-- #-- in your code, you have while(<$client>){...} #-- which is very dangeous because <> will hang if #-- client and server use a different newline encoding #-- so please avoid using <$client> in your networking code #-- #-- 1024 is also a hack which assume your filename will not #-- be longer than 1K. #-- while(sysread($client,$_,1024)){ #-- #-- look for a filename before the first newline #-- if(/(.+?)\n(.*)/ && !$file){ #-- #-- for demo, i will create a filename (sent in by client) #-- appending with .by_server. this helps you #-- to run this demo code without worrying overwriting #-- the original file in the same machine #-- $file = $1 . '.by_server'; open(FILE,">$file") || last; print FILE $2; }else{ print FILE if($file); } } close(FILE) if($file); close($client); $file = undef; } __END__ #### #!/usr/bin/perl -w use strict; use IO::Socket::INET; #-- #-- client.pl #-- my $server = IO::Socket::INET->new(PeerAddr => 'localhost', PeerPort => 5050, Proto => 'tcp') || die $!; my $file = 'tmp.txt'; #-- #-- send the file name to server.pl #-- print $server "$file\n"; #-- #-- and then the content #-- open(FILE,$file) || die $!; print $server $_ while(); close(FILE); close($server); __END__