SHOJI's Code
 仕事や趣味で書いた各種言語のプログラミングコード(エクセルVBA,PHP,C/C++/C#,JavaScript等)、その他雑記。
2018.07<<12345678910111213141516171819202122232425262728293031>>2018.09
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

結構、前にプログラミングしたものだが、ちょっと載せる。
PHPをコマンドラインで起動して、サーバーにするサンプル。


server.php
<?php
// サーバー待受開始
$bind = "0.0.0.0:12345";
if (($server=@stream_socket_server("tcp://$bind", $errno, $errstr))===false) {
echo "failed to open stream '$bind'. - $errstr";
die;
}
echo "started.\r\n";

// クライアントリスト初期化
$clients = array();

// ループ
$loops = 0;
$time = time();
while (true) {

// 接続処理
if (($client=@stream_socket_accept($server, 0.01, $peername))!==false) {
$clients[] = $client;
echo "connected by '$peername'.\r\n";
echo count($clients)." clients are connected.\r\n";
}

// 受信
$r = $clients;
@stream_select($r, $w=null, $e=null, 0, 1000);
foreach ($r as $s) {
$peername = @stream_socket_get_name($s, true);

if (($line=@fgets($s))===false) {
echo "disconnected by '$peername'.\r\n";
disconnect($s);
continue;
}

echo "[$peername] R:$line";

$line = strtolower(trim(preg_replace("/\r?\n?$/", "", $line)));
switch ($line) {
case 'hello':
$res = "Hello, $peername";
break;

case 'now':
$res = date("Y-m-d H:i:s");
break;

case 'lapse':
$res = (time() - $time)." seconds";
break;

case 'loop':
$res = "$loops times";
break;

case 'quit':
$res = 'bye';
break;

default:
$res = "unknown command '$line'.";
}

echo "[$peername] W:$res\r\n";
fwrite($s, $res);
fwrite($s, "\r\n");

if ($line=='quit') {
echo "[$peername] disconnceted.\r\n";
disconnect($s);
}
}

$loops++;
}



function disconnect($s)
{
global $clients;

for ($i=0;$i<count($clients);$i++) {
if ($s===$clients[$i]) {
array_splice($clients, $i);
break;
}
}
@fclose($s);
}
?>


次のように起動する
php -f server.php

ま、あいかわらずだが、適当に組んでいるので、あしからず。

テーマ:PHP - ジャンル:コンピュータ
コメント
この記事へのコメント
管理人のみ閲覧できます
このコメントは管理人のみ閲覧できます
2012/03/26(月) 17:56:06 | | #[ 編集]
コメントを投稿する

管理者にだけ表示を許可する
トラックバック
この記事のトラックバックURL
この記事へのトラックバック
copyright © 2004-2006 SHOJI, Powered By FC2ブログ all rights reserved.
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。