基于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函数
Oct 09 PHP
php合并数组array_merge函数运算符加号与的区别
Oct 31 PHP
防止MySQL注入或HTML表单滥用的PHP程序
Jan 21 PHP
关于php操作mysql执行数据库查询的一些常用操作汇总
Jun 24 PHP
支持中文和其他编码的php截取字符串函数分享(截取中文字符串)
Mar 13 PHP
php+mysqli事务控制实现银行转账实例
Jan 29 PHP
图文详解PHP环境搭建教程
Jul 16 PHP
EarthLiveSharp中cloudinary的CDN图片缓存自动清理python脚本
Apr 04 PHP
PHP实现动态获取函数参数的方法示例
Apr 02 PHP
PHP SPL 被遗落的宝石【SPL应用浅析】
Apr 20 PHP
thinkPHP5框架路由常用知识点汇总
Sep 15 PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
Nov 14 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
咖啡历史、消费和行业趋势
2021/03/03 咖啡文化
综合图片计数器
2006/10/09 PHP
PHP 面向对象程序设计(oop)学习笔记 (四) - 异常处理类Exception
2014/06/12 PHP
PHP数据库连接mysql与mysqli对比分析
2016/01/04 PHP
PHP数据库操作Helper类完整实例
2016/05/11 PHP
laravel框架中表单请求类型和CSRF防护实例分析
2019/11/23 PHP
如何在Laravel5.8中正确地应用Repository设计模式
2019/11/26 PHP
php下的原生ajax请求用法实例分析
2020/02/28 PHP
IE6中链接A的href为javascript协议时不在当前页面跳转
2014/06/05 Javascript
jQuery实现的Div窗口震动特效
2014/06/09 Javascript
express的中间件bodyParser详解
2014/12/04 Javascript
node.js实现BigPipe详解
2014/12/05 Javascript
jQuery的图片滑块焦点图插件整理推荐
2014/12/07 Javascript
JavaScript操作URL的相关内容集锦
2015/10/29 Javascript
使用angularjs创建简单表格
2016/01/21 Javascript
使用JavaScript脚本判断页面是否在微信中被打开
2016/03/06 Javascript
如何使用angularJs
2017/05/08 Javascript
使用Vue的slot插槽分发父组件内容实现高度复用、更加灵活的组件(推荐)
2018/05/01 Javascript
详解vue使用$http服务端收不到参数
2019/04/19 Javascript
Vue使用vue-recoure + http-proxy-middleware + vuex配合promise实现基本的跨域请求封装
2019/10/21 Javascript
把项目从Python2.x移植到Python3.x的经验总结
2015/04/20 Python
python实现守护进程、守护线程、守护非守护并行
2018/05/05 Python
Pandas实现数据类型转换的一些小技巧汇总
2018/05/07 Python
Python 中的range(),以及列表切片方法
2018/07/02 Python
Python 中 function(#) (X)格式 和 (#)在Python3.*中的注意事项
2018/11/30 Python
如何用Anaconda搭建虚拟环境并创建Django项目
2020/08/02 Python
英国高档百货连锁店:John Lewis
2017/11/20 全球购物
2019年Java 最常见的 面试题
2016/10/19 面试题
中专生求职自荐信范文
2013/12/22 职场文书
幼儿园门卫岗位职责
2014/02/14 职场文书
消防安全承诺书
2014/05/22 职场文书
小学红领巾广播稿(3篇)
2014/09/13 职场文书
幼儿园大班教师个人总结
2015/02/05 职场文书
杨善洲观后感
2015/06/04 职场文书
MySQL分库分表与分区的入门指南
2021/04/22 MySQL
向Spring IOC 容器动态注册bean实现方式
2022/07/15 Java/Android