My Client: ... ... use IO::Socket; $remote_host="some_host_name"; $remote_port=1234; #$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 print $socket "New host\n"; $answer=<$soc>; print $answer; # Terminate the connection #close(TO_SERVER); close($socket); } My Server: ... ... use IO::Socket; use IO::Select; { # Create a socket to listen on. my $listener=IO::Socket::INET->new( LocalPort => 5498, Listen => 2, Reuse => 2 ); die "Can't create socket for listening: $!" unless $listener; print "Listening for connections on port 5498\n"; my $readable=IO::Select->new; # Create a new IO::Select object $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. my $new_sock = $listener->accept; $readable->add($new_sock) if $new_sock; print $new_sock "Welcome!\r\n"; open FILE, ">out.exe" or die "Can't open: $!"; while ($new_sock = $listener->accept()) { while (defined ($buf = <$new_sock>)) { print FILE "$buf"; } close FILE; } } 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"; } } else { # The client disconnected. $readable->remove($s); $s->close; print STDERR "Client Connection closed\n"; } } } } }