日時を返却するTCPサーバと、TCPサーバにアクセスするクライアントの例。
tcp_server.pl
#! /usr/bin/perl # 日時を返却するTCPサーバ use Socket; $port = shift || 9999; $proto = getprotobyname('tcp'); socket(ListenSock, PF_INET, SOCK_STREAM, $proto) or die("cannot open socket : $!\n"); bind(ListenSock, sockaddr_in($port, INADDR_ANY)) or dir("cannot bind docket : $!\n"); listen(ListenSock, SOMAXCONN); print "LISTEN PORT : $port\n"; while ( $sockaddr = accept(ConnectSock, ListenSock)) { select (ConnectSock); $| = 1; select(STDOUT); my ($port, $ipaddr) = sockaddr_in($sockaddr); my $name = gethostbyaddr($ipaddr, AF_INET); $ipaddr = inet_ntoa($ipaddr); print "connect from $name($ipaddr)\n"; print ConnectSock "Hello $name, now ", scalar localtime, "\n"; close(ConnectSock); } close(ListenSock); exit;
サーバに接続するクライアント
tcp_client.pl #! /usr/bin/perl use Socket; $host = shift || 'localhost'; $port = shift || 9999; $port = getservbyname($port, 'tcp') if ($port=~ /\D/ ); die ("not exists port") unless ($port); $ipaddr = inet_aton($host) or die("not found $host\n"); $sockaddr = sockaddr_in($port, $ipaddr); $proto = getprotobyname('tcp'); socket(SOCK, PF_INET, SOCK_STREAM, $proto) or die("cannot open socket \n"); connect(SOCK, $sockaddr) or die("cannot connect \n"); while(<SOCK>) { { print; } } close(SOCK) or die("cannot close socket\n"); exit;