基于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下escape解码函数的实现方法
Aug 08 PHP
匹配csdn用户数据库与官方用户的重合度并将重叠部分的用户筛选出来
Dec 25 PHP
php xml常用函数的集合(比较详细)
Jun 06 PHP
PHP大批量插入数据库的3种方法和速度对比
Jul 08 PHP
PHP正则表达式 /i, /is, /s, /isU等介绍
Oct 23 PHP
PHP中soap的用法实例
Oct 24 PHP
thinkphp3.0输出重复两次的解决方法
Dec 19 PHP
php如何执行非缓冲查询API
Jul 22 PHP
php实现的二分查找算法示例
Jun 20 PHP
PHP微信PC二维码登陆的实现思路
Jul 13 PHP
php报错502badgateway解决方法
Oct 11 PHP
PHP Swoole异步Redis客户端实现方法示例
Oct 24 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统计文件大小,以GB、MB、KB、B输出
2011/05/29 PHP
zend optimizer在wamp的基础上安装图文教程
2013/10/26 PHP
支持生僻字且自动识别utf-8编码的php汉字转拼音类
2014/06/27 PHP
PHP 正则表达式小结
2015/02/12 PHP
ecshop后台编辑器替换成ueditor编辑器
2015/03/03 PHP
PHP Swoole异步MySQL客户端实现方法示例
2019/10/24 PHP
php7连接MySQL实现简易查询程序的方法
2020/10/13 PHP
一个很简单的jquery+xml+ajax的无刷新树结构(无css,后台是c#)
2010/06/02 Javascript
jQuery 选择器项目实例分析及实现代码
2012/12/28 Javascript
深入理解javascript中defer的作用
2013/12/11 Javascript
jquery获得keycode的示例代码
2013/12/30 Javascript
js使用post 方式打开新窗口
2015/02/26 Javascript
javascript实现checkBox的全选,反选与赋值
2015/03/12 Javascript
简介AngularJS的视图功能应用
2015/06/17 Javascript
基于BootStrap Metronic开发框架经验小结【二】列表分页处理和插件JSTree的使用
2016/05/12 Javascript
深入理解jQuery.data() 的实现方式
2016/11/30 Javascript
JQ中$(window).load和$(document).ready区别与执行顺序
2017/03/01 Javascript
jQuery实现基本动画效果的方法详解
2018/09/06 jQuery
浅谈在Vue.js中如何实现时间转换指令
2019/01/06 Javascript
如何检查一个对象是否为空
2019/04/11 Javascript
使用Vue CLI创建typescript项目的方法
2019/08/09 Javascript
Vue Extends 扩展选项用法完整实例
2019/09/17 Javascript
js实现查询商品案例
2020/07/22 Javascript
node.js 如何监视文件变化
2020/09/01 Javascript
[05:09]第二届DOTA2亚洲邀请赛决赛日比赛集锦:iG 3:0 OG夺冠
2017/04/05 DOTA
浅谈Python中的可变对象和不可变对象
2017/07/07 Python
PyQtGraph在pyqt中的应用及安装过程
2019/08/04 Python
Python+AutoIt实现界面工具开发过程详解
2019/08/07 Python
PyTorch之图像和Tensor填充的实例
2019/08/18 Python
CSS3 实现时间轴动画
2020/11/25 HTML / CSS
简述安装Slackware Linux系统的过程
2012/01/12 面试题
基层党建工作宣传标语
2014/06/24 职场文书
学校领导班子群众路线整改措施
2014/09/16 职场文书
2014年大学生党员评议表自我评价
2014/09/20 职场文书
详解MySQL的半同步
2021/04/22 MySQL
vue报错function () { [native code] },无法出现我们想要的内容 Unknown custom element
2022/04/11 Vue.js