サーバーソケット
サーバーソケットに関して説明します。
使用するにはIO::Socketをuseします。
use IO::Socket;
サーバーソケットは次の様に作成します。
new IO::Socket::INET(
[LocalAddr => ホスト名,]
LocalPort => ポート番号,
Proto => プロトコル,
Listen => 最大接続待ち数
Reuse => ソケットの再利用フラグ
)
指定する引数は次の様になります。
LocalAddr ローカルホストのホスト名、またはIPアドレス(省略可能)
LocalPort ローカルホストのポート名、またはポート番号
Proto プロトコル、tcpやudp等
Listen クライアントからの最大接続待ちの数
Reuse ソケットを再利用するかどうかのフラグ(1の場合再利用)
次のファイルをechoserver.plという名前で保存します。
use IO::Socket;
$server = new IO::Socket::INET(
LocalPort => "8888",
Proto => "tcp",
Listen => 5,
Reuse => 1
);
unless ($server) {
print "ソケットが作成できませんでした\n";
}
while (1) {
$client = $server->accept();
print "接続されました\n";
while ($recv = <$client>) {
print "クライアントからの入力:$recv";
print $client $recv;
}
$client->close();
}
$server->close();
次のファイルをechoclient.plという名前で保存します。
use IO::Socket;
$client = new IO::Socket::INET(
PeerAddr => "127.0.0.1",
PeerPort => "8888",
Proto => "tcp",
TimeOut => 3
);
unless ($client) {
print "ソケットが作成できませんでした\n";
}
while ($send = ) {
print $client $send;
$recv = <$client>;
print "サーバーからのレスポンス:$recv";
}
$client->close();
実行結果は、次の様になります。
> perl echoserver.pl
接続されました
クライアントからの入力:hoge
クライアントからの入力:test
^C
> perl echoclient.pl
hoge
サーバーからのレスポンス:hoge
test
サーバーからのレスポンス:test
^C