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

Posted 简庆旺的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP Socket(套接字连接)扩展简介和使用方法相关的知识,希望对你有一定的参考价值。

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

以上是关于PHP Socket(套接字连接)扩展简介和使用方法的主要内容,如果未能解决你的问题,请参考以下文章

010-2 Socket套接字类型

如何将用户名从php会话存储到nodejs中的socket.io库和页面刷新时套接字连接断开。为啥?

PHP Socket PDO SQLSTATE[HY000] [2002] 没有这样的文件或目录

PHP socket连接

socket.io 的可扩展架构

ZMQ:socket_send/recv 阻塞