William Ampeh wrote: > Hello David, > > > How would you convert your code to allow a bidirectional communication > between the clients and the server without the use of files or named > pipes? > > That is: > Client send a request to server, waits for server to respond, > Server processes client's request, and send response back to client, > Client views server responds and sends another request to server. > Server responds,
keep the request alive so the client and server can talk to each other: #!/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 $!; while($| = my $client = $server->accept){ while(sysread($client,$_,1024)){ next unless(/^time: (.+)/i); my $token = $1; if($token eq 'whole'){ print $client scalar localtime; }elsif($token eq 'year'){ print $client (localtime)[5]+1900; }elsif($token eq 'month'){ print $client sprintf("%02d",(localtime)[4]+1); }elsif($token eq 'day'){ print $client sprintf("%02d",(localtime)[6]); }elsif($token eq 'done'){ #-- #-- at this point, the client wants to stop talking #-- print $client -1; close($client); $client = undef; last; }else{ print $client "?token: $token"; } } close($client) if($client); } __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 $!; $| = 1; while(<STDIN>){ chomp; last if(/quit/i); print $server $_; if(sysread($server,my $answer,1024)){ if($answer =~ /^\?(.+)/){ print STDERR "server response with unknown $1\n"; }elsif($answer =~ /^-1$/){ close($server); $server = undef; last; }else{ print STDERR "Server: $answer\n"; } } } close($server) if($server); __END__ transaction: [panda]# perl server.pl & [panda]# perl client.pl time: whole Server: Thu Jan 8 14:50:46 2004 time: day Server: 04 time: year Server: 2004 time: month Server: 01 time: what server response with unknown token: what quit [panda]# the server keeps respond to client request until the client: 1. close the connection on its end 2. send a done command i notice that you might have sent another reply to one of my previous message with some of your code. i haven't get a chance to look at them yet. pretty busy nowadays, i will take a look at your code when i have more time. david -- sub'_{print"@_ ";* \ = * __ ,\ & \} sub'__{print"@_ ";* \ = * ___ ,\ & \} sub'___{print"@_ ";* \ = * ____ ,\ & \} sub'____{print"@_,\n"}&{_+Just}(another)->(Perl)->(Hacker) -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>