尝试 php socket

        准备研究这个课题的时候一头雾水,对socket以及php实现socket一无所知。于是检索了一下相关文章。大部分的文章要么说的云山雾绕,满篇都是理论,要么直接贴代码,一点说明都没有。还好在万千博文中看到某位大大的精彩讲解,受益良多~ 现在先把这位大大的博文连接贴出来,以供过路游客共同瞻仰: 深入浅出讲解:php的socket通信

        说实话,基础不好,大学读的也不是计算机软件专业,前面的一通理论还是没太看懂。大概的意思可能是说socket就是实现双端通信的一种tcp/ip封装?不管理论,直接调试代码!

       运行中。。。

       运行成功!

       大大的代码出奇的好用!没改什么配置就运行成功了~

       然后再自己慢慢消化理解代码中的精髓。(其实大大的代码里还是有很多问题,尤其是错误处理部分略粗糙,通讯失败可能就会变得一团糟。下面贴出来的是我进行了一些调整后的代码)


模拟服务端:

<?php
header("Content-type:text/html;charset=utf-8");
//确保在连接客户端时不会超时
set_time_limit(0);

$ip = '127.0.0.1';
$port = 1935;

/*
 +-------------------------------
 *    @socket通信整个过程
 +-------------------------------
 *    @socket_create
 *    @socket_bind
 *    @socket_listen
 *    @socket_accept
 *    @socket_read
 *    @socket_write
 *    @socket_close
 +--------------------------------
 */

$sock = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
if(!$sock) {
    die("socket_create() 失败的原因是:".iconv('EUC-CN', 'UTF-8',socket_strerror(socket_last_error()))."<br>");
}

$ret = socket_bind($sock,$ip,$port);
if(!$ret) {
    die("socket_bind() 失败的原因是:".iconv('EUC-CN', 'UTF-8',socket_strerror(socket_last_error()))."<br>");
}

$ret = socket_listen($sock,4);
if(!$ret) {
    die("socket_listen() 失败的原因是:".iconv('EUC-CN', 'UTF-8',socket_strerror(socket_last_error()))."<br>");
}

//最大通讯次数
$count = 0;
do {
    $msgsock = socket_accept($sock);
    if (!$msgsock) {
        echo "socket_accept() failed: reason: " . iconv('EUC-CN', 'UTF-8',socket_strerror(socket_last_error())) . "<br>";
        break;
    } else {

        //发到客户端
        $msg ="测试成功!<br>";
        socket_write($msgsock, $msg, strlen($msg));

        echo "测试成功了啊<br>";
        $buf = socket_read($msgsock,8192);

        $talkback = "收到的信息:$buf<br>";
        echo $talkback;

        if(++$count >= 5){
            break;
        };
    }
    //echo $buf;
    socket_close($msgsock);

} while (true);

socket_close($sock);


模拟客户端:

<?php
header("Content-type:text/html;charset=utf-8");
error_reporting(E_STRICT);
set_time_limit(0);
echo "<h2>TCP/IP Connection</h2>";

$port = 1935;
$ip = "127.0.0.1";

/*
 +-------------------------------
 *    @socket连接整个过程
 +-------------------------------
 *    @socket_create
 *    @socket_connect
 *    @socket_write
 *    @socket_read
 *    @socket_close
 +--------------------------------
 */

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if (!$socket) {
    die("socket_create() failed: reason: " . iconv('EUC-CN', 'UTF-8',socket_strerror(socket_last_error())) . "<br>");
}else {
    echo "OK.<br>";
}

echo "试图连接 '$ip' 端口 '$port'...<br>";
$result = socket_connect($socket, $ip, $port);
if (!$result) {
    die("socket_connect() failed.<br>Reason:  " . iconv('EUC-CN', 'UTF-8',socket_strerror(socket_last_error())) . "<br>");
}else {
    echo "连接OK<br>";
}

$in = "hello world<br>";
$out = '';

if(!socket_write($socket, $in, strlen($in))) {
    echo "socket_write() failed: reason: " . iconv('EUC-CN', 'UTF-8',socket_strerror(socket_last_error())) . "<br>";
}else {
    echo "发送到服务器信息成功!<br>";
    echo "发送的内容为:<font color='red'>$in</font> <br>";
}

while(socket_read($socket, 8192)) {
    echo "接收服务器回传信息成功!<br>";
    echo "接受的内容为:",$out;
}

echo "关闭SOCKET...\n";
socket_close($socket);
echo "关闭OK\n";


客户端每次通讯成功显示:

                                                                 


达到最大通讯次数后服务端显示:

                                                                 

达到最大通讯次数后,客户端显示:

                                                                 

         至此,算是简单的了解了一下socket和php实现socket了。但是据说php的socket服务性能并不优秀,所以实际应用中可能还是要用其他语言实现。。。


       

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我! 毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值