加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > PHP > 正文

php socket 编程(一)

发布时间:2020-05-25 08:11:07 所属栏目:PHP 来源:互联网
导读:socket通常也称作quot;套接字quot;,用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。在Internet上的主机一般运行了多个服务软件,同时提

socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个socket,并绑定到一个端口上,不同的端口对应于不同的服务。 服务端的流程如下:

1、初始化信息并创建套接字(socket_create)
2、绑定IP地址和端口(socket_bind)
3、对端口进行监听(socket_listen)
4、调用accept阻塞,等待有客户端连接(socket_accept)
5、读取请求数据,并处理。(socket_read)
6、发送处理后的数据(socket_write)
7、关闭连接(socket_close)
客户端的流程如下:
1、初始化信息并创建套接字(socket_create)
2、连接服务端(socket_connect)
3、给服务端发送数据(socket_write)
4、获取服务端返回的数据(socket_read)
5、关闭连接(socket_close)
服务端代码server.php如下:
<?php
//设置脚本执行时间,0表示没有限制
set_time_limit(0);

$ip = '127.0.0.1';
$port = 6666;

//创建一个TCP的套接字
if(($socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP)) === false ) {
    //如果创建失败,获取错误信息
    $errMsg = socket_strerror(socket_last_error($socket));
    die("socket_create: {$errMsg}");
}

//绑定套接字
if(socket_bind($socket,$ip,$port) === false) {
    $errMsg = socket_strerror(socket_last_error($socket));
    die("socket_bind: {$errMsg}");
}

//监听
if(socket_listen($socket,5) === false) {
    $errMsg = socket_strerror(socket_last_error($socket));
    die("socket_listen: {$errMsg}");
}

//循环处理客户端连接
do {
    if(($clientSocket = socket_accept($socket)) === false) {
        $errMsg = socket_strerror(socket_last_error($socket));
        die("socket_accept: {$errMsg}");
    } else {

        //给客户端发送信息
        $msg = 'connect success';
        socket_write($clientSocket,$msg,strlen($msg));
    
        //读取客户端发来的信息
        $clientMsg = socket_read($clientSocket,8192);
        echo "client msg: {$clientMsg}";
    }
    socket_close($clientSocket);
} while (true);

socket_close($socket);
客户端代码client.php如下:
<?php
//设置脚本执行时间,0表示没有限制
set_time_limit(0);

$ip = '127.0.0.1';
$port = 6666;

//创建一个TCP的套接字
if(($socket = socket_create(AF_INET,SOL_TCP)) === false ) {
    //如果创建失败,获取错误信息
    $errMsg = socket_strerror(socket_last_error($socket));
    die("socket_create: {$errMsg}");
}

//套接字连接
if(socket_connect($socket,$port) === false) {
    $errMsg = socket_strerror(socket_last_error($socket));
    die("socket_connect: {$errMsg}");
}

//发送信息给服务端
$msg = "client post msgrn";
if(socket_write($socket,strlen($msg))) {
    echo "client post msg successrn";
}

//循环接收服务端发来的信息
while($serverMsg = socket_read($socket,8192)) {
    echo "server msg: {$serverMsg} rn";
}

//关闭套接字
socket_close($socket);
(*注意代码需运行在cli下,进入到server.php代码目录)
> php server.php
我们通过如下命令查看,套接字是否创建成功。
> netstat -ano
可以看到6666端口已处在监听状态 然后我们运行client.php程序
> php client.php
可以看到服务端接收到了客户端发送的数据 客户端也收到了服务端发送的数据

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读