in reply to Two way socket

Made a small change and now your client received from server.

You have a line:
$answer = <$soc>;
And it should be:
$answre = <$socket>;

Use 'use strict' next time, and you can spot this problem yourself;-)

Update:

Now I looked at your server side code, and found that, after it communicated with the first client, it quickly sink into a dead loop, and the rest of your code is not reachable (see my comment made in the code):
while ($new_sock = $listener->accept()) #now you just stuck in this loop { while (defined ($buf = <$new_sock>)) #where do you reply to your client, start from the second client? + { print FILE "$buf"; } close FILE; }

Replies are listed 'Best First'.
Re: Re: Two way socket
by Anonymous Monk on Oct 16, 2003 at 05:09 UTC
    Great!
    In order to use the code
    else { # It's an established connection print "established s $s listener $listener\n"; print $listener "Why don't you call me anymore?\n" +; my $buf = <$s>; # Try to read a line # Was there anyone on the other end? if( defined $buf ) { # If they said goodbye, close the socket. +If not, # echo what they said to us. if ($buf =~ /goodbye/i) { print $s "See you later!\n"; $readable->remove($s); $s->close; } else { print $s "You said: $buf\n"; }
    How would one implement a client that is continuously connected to the server, until a message like "goodbye" is keyed?
      Wrote this sample for you with Perl threads module:
      server.pl: use strict; use threads; use IO::Socket::INET; $| ++; my $listener = IO::Socket::INET->new(LocalPort => 3126, Listen => 5, Reuse => 1) || die "Cannot create socket\n"; my $client; my $client_num = 0; while (1) { $client = $listener->accept; threads->create(\&start_thread, $client, ++ $client_num); } sub start_thread { my ($client, $client_num) = @_; print "thread created for client $client_num\n"; while (1) { my $req; $client->recv($req, 700000); return if ($req eq ""); print $client $req; } return; } client.pl: use strict; use IO::Socket; my $server = IO::Socket::INET->new(Proto => "tcp", PeerPort => 3126, PeerAddr => "localhost", Timeout => 2000) || die "failed to connect\n"; for (1..100) { print $server $_; my $res; $server->recv($res, 70000); print $res; }
Re: Re: Two way socket
by ctilmes (Vicar) on Oct 16, 2003 at 16:11 UTC
    >You have a line:
    >$answer = <$soc>;
    >And it should be:
    >$answre = <$socket>;
    or maybe $answer = <$socket>;
Re: Re: Two way socket
by Anonymous Monk on Oct 16, 2003 at 05:34 UTC
    Well, actually, I was trying to send a file accross and I pasted the file code too.. my mistake, I only want to send data back and forth to the server from the socket client.. That's all!... It sounds to simple, but
    $buf = <$s>; # Try to read a line print "$buf"; # Was there anyone on the other end? if (( defined $buf ) || ($buf =~ /\w/)) {

    doesn't work, though it prints what the client sends in print $buf;, it does not go into the condition if (defined $buf) !!!!!