![]() |
|
首页 │ Apache │ Linux│ Java│ MySQL│ 注册│帮助 | |||
在 chinaunix php 版上讨论时碰到的, 这只是一个很简单的例子, 有心人可以比较试试.
测试地址: http://bbs.twomice.net/telnet.php
[PHP]
<?php
@set_time_limit(0);
//
// 这只是一个很简单的例子,提供的是思路;主要还得自己参考资料编写
//
$sock = fsockopen("bbs.twomice.net", 23, &$errno, &$error, 10);
if (!$sock) exit("fail to connect($error).");
socket_set_timeout($sock, 1);
stream_set_blocking ($sock, FALSE);
// 这是转换 unix 颜色的函数 (以前写的,效果一般)
@require ("inc/ansi2css.inc.php");
// 输入设定
for ($i = 0; $i < 300; $i++) echo " ";
echo "\n";
flush();
// 自己设定停止的触发条件,我这里写的是超过 30秒就关闭连接了
$maxtime = 300;
$start_time = time();
while (true) {
if (feof($sock)) {
echo "FEOF(socket)\n";
fclose($sock);
break;
}
$buf = "";
$buf = fgets($sock, 256);
if (strlen($buf) > 0) {
// guest
if (strstr($buf, "请输入代号:")) fputs($sock, "guest\n");
elseif (strstr($buf, "请按任意键继续")) fputs($sock, "\n");
elseif (strstr($buf, "请按 Y 键继续")) fputs($sock, "y\n");
// 换行还原
$buf = preg_replace("/3\[[0-9;]+H/is", "\n", $buf);
// 读到的资料处理
if (function_exists("ansi2css")) {
$buf = ansi2css($buf);
}
else {
$buf = preg_replace("/3\[[0-9;]*(m|J)/is", "", $buf);
$buf = str_replace("\r", "", $buf);
$buf = nl2br($buf);
}
echo $buf;
flush();
}
// 检查是否满足终止条件
if (time() - $start_time > $maxtime) {
echo "broken normally\n";
break;
}
// 要是用户自己按下了 STOP 键
if (connection_status()) {
echo "broken by connection_status()\n";
break;
}
}
@fclose($sock);
?>
[/PHP]
原文地址:http://www.sou5.cn/sou5/showArt.php?id=3571

