ASPN ActiveState Programmer Network
ActiveState
/ Home / Perl / PHP / Python / Tcl / XSLT /
/ Safari / My ASPN /
Cookbooks | Documentation | Mailing Lists | Modules | News Feeds | Products | User Groups


Recent Messages
List Archives
About the List
List Leaders
Subscription Options

View Subscriptions
Help

View by Topic
ActiveState
.NET Framework
Open Source
Perl
PHP
Python
Tcl
Web Services
XML & XSLT

View by Category
Database
General
SOAP
System Administration
Tools
User Interfaces
Web Programming
XML Programming


MyASPN >> Mail Archive >> perl-unix-users
perl-unix-users
[Perl-unix-users] Single command to and from client/server
by Allegakoen, Justin Devanandan other posts by this author
Jan 14 2004 3:15AM messages near this date
[Perl-unix-users] Memo: DBD and oracle 6 64bit problem | [Perl-unix-users] perl poker game
List,

From the TCP client with IO::Socket on the perlipc page I have made the
following:

# Server code
use strict;
use warnings;
use IO::Socket;
use Net::hostent;
use Sys::Hostname 'hostname';

$|++;
my $Port = 1971;
my $Host = hostname();
my $Server = IO::Socket::INET-> new(Proto => 'tcp', LocalPort => $Port,
Listen =>  SOMAXCONN, Reuse => 1);
die "Can't setup Server" unless $Server;
print "[Server $Host accepting Clients]\n";

while(my $Client = $Server-> accept())
{
	$Client-> autoflush(1);
	print $Client "Connected to $Host\n";
	my $HostInfo = gethostbyaddr($Client-> peeraddr);
	printf "[Connect from %s]\n", $HostInfo-> name ||
$Client-> peerhost;

	while(<$Client> )
	{
		print $Client `$_` if /^dir/i;
		print $_;
		last;
	}
	close $Client;
}

######################################################################

# Client code
#!/usr/local/bin/nsPerl5.005_03/nsperl -w

use strict;
use IO::Socket;

my ($KidPID, $Line);
my $Port = '1971';
my $Host = '123.123.123.123';

my $Handle = IO::Socket::INET-> new(Proto => 'tcp', PeerAddr => $Host,
PeerPort =>  $Port) or die "Cant connect to $Host on $Port:- $!";
$Handle-> autoflush(1);
die "Cant fork: $!" unless defined($KidPID = fork());

if($KidPID)
{
	while(defined($Line = <$Handle> ))
	{
		print STDOUT $Line;
	}
	kill("TERM", $KidPID);
}
else
{
	print $Handle 'dir d:';

	#while(defined($Line = <STDIN> ))
	#{
	#	print $Handle $Line;
	#}
}

I can get connectivity between the two machines, and with the while
uncommented on the client I can key in "dir d:" and a get a response
from the server.

However what I really need is code that fires off a command from the
client with arguments (without keying it in from STDIN), which can then
be picked up by the server, processed and then returned to the client,
closing the client/connection after the return of data, rather than the
continuous interactive example that I borrowed this code from.


I guess the else in my client is the show stopper because my xterm just
sits there. And when I control C the xterm client the server flushes out
the "dir d:" string to the terminal. So I further guess that I need to
close/kill one of the processes that fork spawns in order for it to
return, but I'm not sure how.

Any help appreciated, thanks.

Just in

P.S./ The client sits on a Solaris machine (Perl 5.5 binary dist), while
my server is on Win2003 server (AS 5.6). 

_______________________________________________
Perl-Unix-Users mailing list
Perl-Unix-Users@[...].com
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs

Privacy Policy | Email Opt-out | Feedback | Syndication
© ActiveState Software Inc. All rights reserved