• 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> ";

    /* 获取网站服务器端口 */
    $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()) . " ";
    } else {
    echo "socket_create创建成功 ";
    }

    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)) . " ";
    } 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 "结束. ";
    ?>

    结果:

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

  • 相关阅读:
    maven中使用命令下载指定pom.xml中的jar文件
    资源监控平台
    PerfDog的使用教程
    compile ffmepg with amr
    matplotlib
    总线通信
    阿里云NAS文件迁移项目实践
    React diff算法
    IDE Eval Resetter:JetBrains 全家桶无限试用插件
    IntelliJ IDEA 2021.2.0 官方正版
  • 原文地址:https://www.cnblogs.com/jianqingwang/p/6824893.html
Copyright © 2020-2023  润新知