频道直达 - 专题 - 新闻 - 基础 - 高级 - 安装 - 技巧 - 数据库 - 手册 - PHP - Linux - Java - MySQL - Apache - 麻辣堂 - 狼盟 - Rails社群 - 搜索 - 下载 - 开源 - 论坛
PHP开发资源网 主页>>PHP基础教程>> 收藏此文 | 收藏本站 | 设为首页

非常实用的socket套接字编程

来源:www.phpx.com 作者:qh663 出处:www.phpx.com 2007-6-4 21:27:06 进入讨论组
关 键 词: socket套接字编程

[php]
/**
* 功能: 套接字
* 作者: qh663
* 参数: string $url 网址,如:http://qh8.net/php/index.php?abc=123
* 参数: bool $get_header 是否返回header标头
* 参数: bool $real_url 用于测试网址是否正确
* 返回: bool/string
*/
function socket($url, $get_header = false,$real_url = false){
$arr = explode('/',$url);
$host = $arr[2];
unset($arr[0], $arr[1], $arr[2]);
$path = '/'.implode('/', $arr);
unset($arr);
$service_port = getservbyname('www', 'tcp');
$address = gethostbyname($host);
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket >= 0) {
$result = socket_connect($socket, $address, $service_port);
if ($result >= 0) {
$in = "HEAD $path HTTP/1.1\r\n";
$in .= "Host: $host\r\n";
$in .= "Connection: Close\r\n\r\n";
socket_write($socket, $in, strlen($in));
if($real_url){
if(socket_read($socket, 15) == 'HTTP/1.1 200 OK') return true;
}elseif($get_header){
while ( $out = socket_read($socket, 512)){
$re .= $out;
}
return $re;
}
socket_close($socket);
}
}
return false;
}
[/php]

//test1 发送一个socket,多线程
//(此例在当前目录新建5个文件 1_tmp.txt、2_tmp.txt、3_tmp.txt、4_tmp.txt、5_tmp.txt)
if(empty($_GET['str'])){
$url = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME'];
while ($a++ < 5){
socket("$url?str={$a}_tmp.txt");
}
} else {
fopen($_GET['str'], "w");;
die();
}

$u = 'http://down1.sz1001.net/up/小型软件2_0810/TomatoGhostXP.rar';
echo "
";

//test2 返回一个地址的header,实验证明运行速度比get_headers更快
echo socket($u,true);

//test3 测试页面是否存在,实验证明运行速度比get_headers更快
echo socket($u,true,true) ? "\n网址正确": "\n网址错误";
欢迎进入PHP开发资源论坛讨论。
收藏此文】【 】【打印】【关闭
相关文章
图文推荐
论 坛 资 源
PHP开发资源网奋斗目标
阅读排行:
热门技术文档
最新图文档
本站编辑推荐:(本站开通Delphi4PHP专区,欢迎进入论坛交流!)
编缉最近更新文章
网站赞助商
搜索您感兴趣的内容
 
   网站首页 -  网站地图 -  网站合作 -  手册中心 -  通用网址 -  网站论坛 -  网站投稿 -  友情链接 -  帮助中心
版权所有:PHP开发资源网 © 2003-2008 通用网址:PHP资源网 合作媒体: 赛迪网IT技术
互联网违法和不良信息举报中心 | 不良信息举报信箱