You want to connect to a socket on a remote machine.
This solution assumes you’re using the Internet to communicate. For TCP-like communication within a single machine, see Section 17.6.
Either use the standard (as of 5.004) IO::Socket::INET class:
use IO::Socket; $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 "Why don't you call me anymore?\n"; $answer = <$socket>; # and terminate the connection when we're done close($socket);
or create a socket by hand for better control:
use Socket; # create a socket socket(TO_SERVER, PF_INET, SOCK_STREAM, getprotobyname('tcp')); # build the address of the remote machine $internet_addr = inet_aton($remote_host) or die "Couldn't convert $remote_host into an Internet address: $!\n"; $paddr = sockaddr_in($remote_port, $internet_addr); # connect connect(TO_SERVER, $paddr) or die "Couldn't connect to $remote_host:$remote_port : $!\n"; # ... do something with the socket print TO_SERVER "Why don't you call me anymore?\n"; # and terminate the connection when we're done close(TO_SERVER);
While coding this by hand requires a lot of steps, the IO::Socket::INET class wraps them all in a convenient constructor. The important things to know are where you’re going (the PeerAddr and PeerPort parameters) and how you’re getting there ...