2006年02月23日

サーバーソケット

サーバーソケットに関して説明します。
使用するには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

2006年02月その他のエントリー

  1. 2006年02月23日

    1. クライアントソケット

  2. 2006年02月08日

    1. stat

    2. exec

    3. system

    4. ファイルテスト演算子(s)

    5. ファイルテスト演算子(S)

    6. ファイルテスト演算子(B)

    7. ファイルテスト演算子(x)

    8. ファイルテスト演算子(w)

    9. ファイルテスト演算子(r)

    10. ファイルテスト演算子(p)

    11. ファイルテスト演算子(o)

    12. ファイルテスト演算子(l)

    13. ファイルテスト演算子(f)

    14. ファイルテスト演算子(d)

    15. ファイルテスト演算子(e)

    16. ファイルテスト演算子

    17. ディレクトリ操作

    18. rmdir

    19. chdir

    20. mkdir

    21. chmod

    22. unlink

    23. rename

    24. 引数

    25. 特殊な読み込み

    26. STDERR

    27. STDOUT

    28. STDIN

    29. ファイル(追記)

    30. ファイル(書き出し)

    31. ファイル(3)

    32. ファイル(2)

    33. ファイル(1)

    34. モジュール(3)

    35. モジュール(2)

    36. モジュール(1)

    37. ライブラリ

    38. リファレンス(ハッシュ)(2)

    39. リファレンス(ハッシュ)

    40. リファレンス(配列)(2)

    41. リファレンス(配列)(1)

    42. リファレンス(スカラー変数)

    43. ローカル変数(local)

    44. ローカル変数(my)

    45. グローバル変数

    46. サブルーチン(戻り値)(2)

    47. サブルーチン(戻り値)(1)

    48. サブルーチン(引数)

    49. サブルーチン

  3. 2006年02月07日

    1. reverse関数

    2. sort関数(3)

    3. sort関数(2)

    4. sort関数(1)

    5. localtime関数

    6. gmtime関数

    7. time関数

    8. rand関数

    9. int関数

    10. sqrt関数

    11. length関数

    12. chomp関数

    13. chop関数

    14. join関数

    15. split関数

    16. sprint関数

  4. 2006年02月06日

    1. printf関数(.数値効果文字)

    2. printf関数(数値効果文字)

    3. printf関数(#効果文字)

    4. printf関数(0効果文字)

    5. printf関数(-効果文字)

    6. printf関数(+効果文字)

    7. printf関数(スペース効果文字)

    8. printf関数(pフォーマット)

    9. printf関数(Gフォーマット)

    10. printf関数(Eフォーマット)

    11. printf関数(Xフォーマット)

    12. printf関数(gフォーマット)

    13. printf関数(fフォーマット)

    14. printf関数(eフォーマット)

    15. printf関数(xフォーマット)

    16. printf関数(oフォーマット)

    17. printf関数(uフォーマット)

    18. printf関数(dフォーマット)

    19. printf関数(sフォーマット)

    20. printf関数(cフォーマット)

    21. printf関数(%%)

    22. printf関数

    23. print関数(2)

    24. print関数(1)

  5. 2006年02月04日

    1. 置換(式)

    2. 置換(gオプション)

    3. 置換(iオプション)

    4. 置換

    5. 正規表現(())

    6. 正規表現({})

    7. 正規表現([^-])(2)

    8. 正規表現([-])(2)

    9. 正規表現([^])(1)

    10. 正規表現([])(1)