基于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 什么是PEAR?(第三篇)
Mar 19 PHP
PHP 页面跳转到另一个页面的多种方法方法总结
Jul 07 PHP
php数组函数序列 之array_count_values() 统计数组中所有值出现的次数函数
Oct 29 PHP
php中的注释、变量、数组、常量、函数应用介绍
Nov 16 PHP
php解决抢购秒杀抽奖等大流量并发入库导致的库存负数的问题
Jun 19 PHP
THINKPHP2.0到3.0有哪些改进之处
Jan 04 PHP
PHP实现WebService的简单示例和实现步骤
Mar 27 PHP
关于php微信订阅号开发之token验证后自动发送消息给订阅号但是没有消息返回的问题
Dec 21 PHP
php简单生成一组与多组随机字符串的方法
May 09 PHP
PHP环形链表实现方法示例
Sep 15 PHP
laravel 5异常错误:FatalErrorException in Handler.php line 38的解决
Oct 12 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
PHP4实际应用经验篇(3)
2006/10/09 PHP
傻瓜化配置PHP环境――Appserv
2006/12/13 PHP
php验证是否是md5编码的简单代码
2014/04/01 PHP
一张表搞清楚php is_null、empty、isset的区别
2015/07/07 PHP
PHP数据的提交与过滤基本操作实例详解
2016/11/11 PHP
详解PHP字符串替换str_replace()函数四种用法
2017/10/13 PHP
PHP实现支持CURL字符串证书传输的方法
2019/03/23 PHP
Nigma vs Alliance BO5 第三场2.14
2021/03/10 DOTA
通过javascript的匿名函数来分析几段简单有趣的代码
2010/06/29 Javascript
JQuery文本框高亮显示插件代码
2011/04/02 Javascript
JavaScript中apply方法的应用技巧小结
2016/09/29 Javascript
Jquery 整理元素选取、常用方法一览表
2016/11/26 Javascript
es6的数字处理的方法(5个)
2017/03/16 Javascript
react 中父组件与子组件双向绑定问题
2019/05/20 Javascript
vue的三种图片引入方式代码实例
2019/11/19 Javascript
[03:02]2014DOTA2西雅图邀请赛 让队员自己告诉你DK NAVI备战情况
2014/07/08 DOTA
Python中常见的数据类型小结
2015/08/29 Python
django2+uwsgi+nginx上线部署到服务器Ubuntu16.04
2018/06/26 Python
python3正则提取字符串里的中文实例
2019/01/31 Python
Python中list循环遍历删除数据的正确方法
2019/09/02 Python
详解pycharm2020.1.1专业版安装指南(推荐)
2020/08/07 Python
美国台面电器和厨具品牌:KitchenAid
2019/04/12 全球购物
存储过程和函数的区别
2013/05/28 面试题
怎么可以提高数据库查询数据的速度
2014/06/28 面试题
中科创达面试题
2016/12/28 面试题
办护照工作证明范本
2014/01/14 职场文书
《风筝》教学反思
2014/04/10 职场文书
2014年酒店前台工作总结
2014/11/14 职场文书
2014年煤矿工作总结
2014/11/24 职场文书
2014年小学语文工作总结
2014/12/20 职场文书
2014年小学美术工作总结
2014/12/20 职场文书
实习科室评语
2015/01/04 职场文书
疾病证明书
2015/06/19 职场文书
导游词之无锡丝业博物馆
2019/11/12 职场文书
Oracle更换为MySQL遇到的问题及解决
2021/05/21 Oracle
MySQL数据库事务的四大特性
2022/04/20 MySQL