PHP Socket(套接字连接)扩展简介和使用方法

来源:互联网 发布:centos开机进入grub 编辑:程序博客网 时间:2024/04/19 15:20

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(套接字连接)扩展简介和使用方法

0 0
原创粉丝点击