PHP socket扩展是基于流行的BSD sockets,实现了和socket通讯功能的底层接口,它可以和客户端一样当做一个socket服务器。
使用这些函数时请注意,虽然他们中有很多和C函数同名的,但声明却很可能不同。未避免混淆,请仔细阅读函数描述。
不熟悉socket编程的可以在Unix手册上找到很多有用的信息,网上也有很多C socket编程方面的教程,简单修改一下就可以应用于PHP socket编程。
第一步:开启socket
到php.ini开启extension=php_sockets.dll,然后重启apache才能生效。如果没有开启或者重启阿帕奇会出现Call to undefined function socket_create()的报错。
第二步:使用socket
PHP socket工作流程是:
1.创建socket socket_create()
2.尝试通过创建的socket连接目标ip socket_connect(),注意了,这里只能写ip,只能写ip,我写localhost就错了。
3.获取连接结果,如果连接成功,我们就可以继续进行自己要做的事情,如果失败,我们做一个后续要做的事情。
4.关闭socket socket_close()
PHP socket请求示例:
<?php error_reporting(E_ALL);
echo "<h2>TCP/IP连接流程</h2>\n";
/* 获取网站服务器端口 */ $service_port = getservbyname('www', 'tcp');
/* 获取服务器的ip地址. */ $address = gethostbyname('www.wangtuizhijia.com');
/* 创建TCP/IP socket. */ $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if ($socket === false) { echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n"; } else { echo "socket_create创建成功\n"; }
echo "尝试通过'$service_port'端口连接'$address' ..."."<br>"; $result = socket_connect($socket, $address, $service_port); if ($result === false) { echo "socket_connect() 连接失败: ($result) " . socket_strerror(socket_last_error($socket)) . "\n"; } else { echo "连接端口成功."."<br>"; }
$in = "HEAD / HTTP/1.1"."<br>"; $in .= "Host: www.wangtuizhijia.com"."<br>"; $in .= "连接关闭"."<br>"; $out = '';
echo "发送HTTP HEAD请求..."."<br>"; socket_write($socket, $in, strlen($in)); echo "成功"."<br>";
echo "响应信息:"."<br>"; while ($out = socket_read($socket, 2048)) { echo $out."<br>"; }
echo "关闭socket..."."<br>"; socket_close($socket); echo "结束.\n\n"; ?>
结果:
TCP/IP连接流程
socket_create创建成功 尝试通过'80'端口连接'103.76.85.67' ... 连接端口成功. 发送HTTP HEAD请求... 成功 响应信息: HTTP/1.1 400 Bad Request Content-Length: 311 Content-Type: text/html; charset=us-ascii Server: Microsoft-HTTPAPI/2.0 Date: Mon, 08 May 2017 06:17:10 GMT Connection: close 关闭socket... 结束.
本人博客:PHP Socket(套接字连接)扩展简介和使用方法
|
请发表评论