基于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 第二节 数据类型之转换
Apr 28 PHP
Linux下CoreSeek及PHP扩展模块的安装
Sep 23 PHP
学习php过程中的一些注意点的总结
Oct 25 PHP
PHP运行SVN命令显示某用户的文件更新记录的代码
Jan 03 PHP
php 判断网页是否是utf8编码的方法
Jun 06 PHP
PHP 5.3新增魔术方法__invoke概述
Jul 23 PHP
PHP中round()函数对浮点数进行四舍五入的方法
Nov 19 PHP
php专用数组排序类ArraySortUtil用法实例
Apr 03 PHP
详解WordPress开发中过滤属性以及Sql语句的函数使用
Dec 25 PHP
详解PHP的Yii框架中组件行为的属性注入和方法注入
Mar 18 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
Feb 15 PHP
PHP isset()及empty()用法区别详解
Aug 29 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常用技术文之文件操作和目录操作总结
2014/09/27 PHP
PHP中的socket_read和socket_recv区别详解
2015/02/09 PHP
PHP时间戳格式全部汇总 (获取时间、时间戳)
2016/06/13 PHP
Laravel 5.3 学习笔记之 配置
2016/08/28 PHP
php微信开发之百度天气预报
2016/11/18 PHP
Jquery ajax不能解析json对象,报Invalid JSON错误的原因和解决方法
2010/03/27 Javascript
JS中Iframe之间传值及子页面与父页面应用
2013/03/11 Javascript
jquery等宽输出文字插件使用介绍
2013/09/18 Javascript
jquery.hotkeys监听键盘按下事件keydown插件
2014/05/11 Javascript
jQuery回调函数的定义及用法实例
2014/12/23 Javascript
javascript实现状态栏文字首尾相接循环滚动的方法
2015/07/22 Javascript
JavaScript中this的9种应用场景及三种复合应用场景
2015/09/12 Javascript
smartcrop.js智能图片裁剪库
2015/10/14 Javascript
微信小程序通过api接口将json数据展现到小程序示例
2017/01/20 Javascript
javascript 删除数组元素和清空数组的简单方法
2017/02/24 Javascript
基于JS代码实现简单易用的倒计时 x 天 x 时 x 分 x 秒效果
2017/07/13 Javascript
angular4模块中给标签添加背景图的实现方法
2017/09/15 Javascript
bootstrap中selectpicker下拉框使用方法实例
2018/03/22 Javascript
关于vue的语法规则检测报错问题的解决
2018/05/21 Javascript
微信小程序系列之自定义顶部导航功能
2019/05/21 Javascript
Nodejs监听日志文件的变化的过程解析
2019/08/04 NodeJs
Nodejs 识别图片类型的方法
2019/08/15 NodeJs
python黑魔法之参数传递
2016/02/12 Python
python中的单引号双引号区别知识点总结
2019/06/23 Python
python实现点击按钮修改数据的方法
2019/07/17 Python
猎人靴英国官网:Hunter Boots
2017/02/02 全球购物
ZWILLING双立人英国网上商店:德国刀具锅具厨具品牌
2018/05/15 全球购物
办公室秘书岗位职责范本
2014/02/11 职场文书
校长创先争优承诺书
2014/08/30 职场文书
公务员培的训心得体会
2014/09/01 职场文书
世界环境日活动总结
2015/02/11 职场文书
法学专业求职信范文
2015/03/19 职场文书
管理失职检讨书范文
2015/05/05 职场文书
幼儿园庆元旦主持词
2015/07/06 职场文书
工作会议简报
2015/07/20 职场文书
2015年小学财务工作总结
2015/07/20 职场文书