I need the Unix machine to send some files to Windows and after some process Windows send back the answer to Unix (of course over the Internet). Is it possible?
I havn't tested these recently, but you might get a head start with Sockets-File-Upload with Net::EasyTCP and File Transfer via Sockets and Indirect file transfer. Also don't forget netcat , you can google for it's usage.
Just to demonstrate the base simplicity of the concept, here is a rudimentary server & client set
Server
#!/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 i
+n by client)
#-- appending with .by_server. this helps you
#-- to run this demo code without worrying ove
+rwriting
#-- 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__
Client
#!/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(<FILE>);
close(FILE);
close($server);
__END__
|