I'm trying to talk to the client from the server, until a predefined message is passed, like say "ok bye".
But my server speaks to the client only once, and then closes the connection.
Here's my server: #!c:\perl\bin\perl use IO::Socket; use IO::Select; use strict; my ($server, $client, $buf, $new_sock); my ($buf, $SOCK_STREAM, $server_port); { # Create a socket to listen on. my $listener=IO::Socket::INET->new( LocalPort => 21000, Listen => +2, Reuse => 2 ); die "Can't create socket for listening: $!" unless $listener; print "Listening for connections on port 21000\n"; my $readable=IO::Select->new; # Create a new IO::Select ob +ject $readable->add($listener); # Add the listener to it while(1) { # Get a list of sockets that are ready to talk to us. my ($ready) = IO::Select->select($readable, undef, undef, +undef); foreach my $s (@$ready) { # Is it a new connection? if($s == $listener) { # Accept the connection and add it to our readable + list. $new_sock = $listener->accept; $readable->add($new_sock) if $new_sock; print $new_sock "Welcome!\r\n"; + } else { # It's an established connection #print "established s $s listener $listener\n"; print $listener "Why don't you call me anymore?\n" +; $buf = <$s>; # Try to read a line print "$buf"; # Was there anyone on the other end? if (( defined $buf ) || ($buf =~ /\w/)) { # 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"; } } else { print $new_sock "Still there?\r\n"; # The client disconnected. $readable->remove($s); $s->close; print STDERR "Client Connection closed +, because you said $buf\n"; } } } } } My Client #!c:\perl\bin\perl use Socket; use IO::Socket; use strict; my ($remote_host, $remote_port); my ($internet_addr, $paddr); my ($soc, $answer, $socket); { use IO::Socket; $remote_host="localhost"; $remote_port=21000; #$soc=IO::Socket::INET->new("$remote_host:$remote_port") or die $@ +; $socket = IO::Socket::INET->new(PeerAddr => $remote_host, PeerPort => $remote_port, Proto => "tcp", Type => SOCK_STREAM) or die "Couldn't connect to $remote_host:$remote_port : $@\n"; #....do something with the socket do { print $socket "New host\n"; $answer=<$socket>; print $answer; }while ($answer =~ /end/); # Terminate the connection #close(TO_SERVER); close($socket); }
Thanks in advance!

In reply to Socket Again!!!! by Anonymous Monk

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.