基于PHP Socket配置以及实例的详细介绍


Posted in PHP onJune 13, 2013

2个php测试文件
server.php

<?php
     //phpinfo();
//确保在连接客户端时不会超时
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
 +--------------------------------
 */
/*----------------    以下操作都是手册上的    -------------------*/
if(($sock = socket_create(AF_INET,SOCK_STREAM,SOL_TCP)) < 0) {
    echo "socket_create() 失败的原因是:".socket_strerror($sock)."\n";
}
if(($ret = socket_bind($sock,$ip,$port)) < 0) {
    echo "socket_bind() 失败的原因是:".socket_strerror($ret)."\n";
}
if(($ret = socket_listen($sock,4)) < 0) {
    echo "socket_listen() 失败的原因是:".socket_strerror($ret)."\n";
}
$count = 0;
do {
    if (($msgsock = socket_accept($sock)) < 0) {
        echo "socket_accept() failed: reason: " . socket_strerror($msgsock) . "\n";
        break;
    } else {        //发到客户端
        $msg ="测试成功!\n";
        socket_write($msgsock, $msg, strlen($msg));
        echo "测试成功了啊\n";
        $buf = socket_read($msgsock,8192);
        
        $talkback = "收到的信息:$buf\n";
        echo $talkback;
        if(++$count >= 5){
            break;
        };
    
    }
    //echo $buf;
    socket_close($msgsock);
} while (true);
socket_close($sock);
?>

client.php
<?php
error_reporting(E_ALL);
set_time_limit(0);
echo "<h2>TCP/IP Connection</h2>\n";
$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 < 0) {
    echo "socket_create() failed: reason: " . socket_strerror($socket) . "\n";
}else {
    echo "OK.\n";
}
echo "试图连接 '$ip' 端口 '$port'...\n";
$result = socket_connect($socket, $ip, $port);
if ($result < 0) {
    echo "socket_connect() failed.\nReason: ($result) " . socket_strerror($result) . "\n";
}else {
    echo "连接OK\n";
}
$in = "Ho\r\n";
$in .= "first blood\r\n";
$out = '';
if(!socket_write($socket, $in, strlen($in))) {
    echo "socket_write() failed: reason: " . socket_strerror($socket) . "\n";
}else {
    echo "发送到服务器信息成功!\n";
    echo "发送的内容为:<font color='red'>$in</font> <br>";
}
while($out = socket_read($socket, 8192)) {
    echo "接收服务器回传信息成功!\n";
    echo "接受的内容为:",$out;
}
echo "关闭SOCKET...\n";
socket_close($socket);
echo "关闭OK\n";
?>

侦听
# /usr/local/php/bin/php  /usr/local/apache2/htdocs/server.php

基于PHP Socket配置以及实例的详细介绍

请求
# /usr/local/php/bin/php  /usr/local/apache2/htdocs/client.php

基于PHP Socket配置以及实例的详细介绍

默认PHP是没有开启Socket的
 
#cd ./ext/sockets/
# /usr/local/php/bin/phpize
# ./configure --enable-sockets --with-php-config=/usr/local/php/bin/php-config
# make
# make install

php.ini修改配置
增加
extension=sockets.so
 
重启apache
# /usr/local/apache2/bin/apachectl restart

===================
Windows下的配置
修改php.ini
extension=php_sockets.dll
重启apache
cmd下起2个
php的安装目录

C:/php/php.exe   F:web/server.php
C:/php/php.exe   F:web/client.php

PHP 相关文章推荐
PHP序列号生成函数和字符串替换函数代码
Jun 07 PHP
解析zend studio中直接导入svn中的项目的方法步骤
Jun 21 PHP
PHP查找与搜索数组元素方法总结
Jun 12 PHP
php遍历树的常用方法汇总
Jun 18 PHP
详解YII关联查询
Jan 10 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
Aug 28 PHP
深入理解PHP的远程多会话调试
Sep 21 PHP
php双层循环(九九乘法表)
Oct 23 PHP
workerman结合laravel开发在线聊天应用的示例代码
Oct 30 PHP
PHP+jQuery实现即点即改功能示例
Feb 21 PHP
php实现 master-worker 守护多进程模式的实例代码
Jul 20 PHP
基于laravel-admin 后台 列表标签背景的使用方法
Oct 03 PHP
深入php socket的讲解与实例分析
Jun 13 #PHP
PHP数据类型的总结分析
Jun 13 #PHP
如何用C语言编写PHP扩展的详解
Jun 13 #PHP
探讨:如何编写PHP扩展
Jun 13 #PHP
PHP APC的安装与使用详解
Jun 13 #PHP
eAccelerator的安装与使用详解
Jun 13 #PHP
探讨Hessian在PHP中的使用分析
Jun 13 #PHP
You might like
php debug 安装技巧
2011/04/30 PHP
Linux系统下php获得系统分区信息的方法
2015/03/30 PHP
PDO操作MySQL的基础教程(推荐)
2017/08/18 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
2017/08/31 PHP
PHP设计模式概论【概念、分类、原则等】
2020/05/01 PHP
JavaScript中的new的使用方法与注意事项
2007/05/16 Javascript
Javascript 构造函数 实例分析
2008/11/26 Javascript
js 对象是否存在判断
2009/07/15 Javascript
jquery实现的元素的left增加N像素 鼠标移开会慢慢的移动到原来的位置
2010/03/21 Javascript
jquery ui bootstrap 实现自定义风格
2014/11/14 Javascript
javascript Slip.js实现整屏滑动的手机网页
2015/11/25 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记6)
2015/12/20 Javascript
jQuery css() 方法动态修改CSS属性
2016/09/25 Javascript
React实现点击删除列表中对应项
2017/01/10 Javascript
小程序自定义日历效果
2018/12/29 Javascript
node.js中 mysql 增删改查操作及async,await处理实例分析
2020/02/11 Javascript
element-ui 实现响应式导航栏的示例代码
2020/05/08 Javascript
解决Vue使用bus总线时,第一次路由跳转时数据没成功传递问题
2020/07/28 Javascript
[03:52]显微镜下的DOTA2第三期——英雄在无聊的时候干什么
2014/06/20 DOTA
Python实现二叉树结构与进行二叉树遍历的方法详解
2016/05/24 Python
Pandas:Series和DataFrame删除指定轴上数据的方法
2018/11/10 Python
对python操作kafka写入json数据的简单demo分享
2018/12/27 Python
Django 模型类(models.py)的定义详解
2019/07/19 Python
Python企业编码生成系统之系统主要函数设计详解
2019/07/26 Python
python中对_init_的理解及实例解析
2019/10/11 Python
浅谈python元素如何去重,去重后如何保持原来元素的顺序不变
2020/02/28 Python
Django Model中字段(field)的各种选项说明
2020/05/19 Python
keras读取h5文件load_weights、load代码操作
2020/06/12 Python
Swanson中国官网:美国斯旺森健康产品公司
2021/03/01 全球购物
维德科技C#面试题笔试题
2015/12/09 面试题
营销人才自我鉴定范文
2013/12/25 职场文书
毕业自我鉴定怎么写
2014/03/25 职场文书
2014年文明创建工作总结
2014/11/25 职场文书
创业计划书之小型广告公司
2019/10/22 职场文书
Python 的 sum() Pythonic 的求和方法详细
2021/10/16 Python
通过feDisplacementMap和feImage实现水波特效
2022/04/24 HTML / CSS