基于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 动态添加记录
Mar 10 PHP
php 无极分类(递归)实现代码
Jan 05 PHP
php图片加中文水印实现代码分享
Oct 31 PHP
新浪SAE云平台下使用codeigniter的数据库配置
Jun 12 PHP
ThinkPHP的cookie和session冲突造成Cookie不能使用的解决方法
Jul 01 PHP
php线性表的入栈与出栈实例分析
Jun 12 PHP
开启PHP的伪静态模式
Dec 31 PHP
php使用curl通过代理获取数据的实现方法
May 16 PHP
php微信公众平台交互与接口详解
Nov 28 PHP
PHP实现动态获取函数参数的方法示例
Apr 02 PHP
Laravel框架集成UEditor编辑器的方法图文与实例详解
Apr 17 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
Feb 27 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
在Zeus Web Server中安装PHP语言支持
2006/10/09 PHP
应用开发中涉及到的css和php笔记分享
2011/08/02 PHP
浅析Apache中RewriteCond规则参数的详细介绍
2013/06/30 PHP
php连接oracle数据库及查询数据的方法
2014/12/29 PHP
JQuery 学习笔记 element属性控制
2009/07/23 Javascript
最流行的Node.js精简型和全栈型开发框架介绍
2015/02/26 Javascript
jquery 将当前时间转换成yyyymmdd格式的实现方法
2016/06/01 Javascript
jQuery中 $ 符号的冲突问题及解决方案
2016/11/04 Javascript
Vue开发过程中遇到的疑惑知识点总结
2017/01/20 Javascript
利用原生JS与jQuery实现数字线性变化的动画
2017/02/24 Javascript
原生js实现简单的模态框示例
2017/09/08 Javascript
Vue的移动端多图上传插件vue-easy-uploader的示例代码
2017/11/27 Javascript
Vue中遍历数组的新方法实例详解
2019/07/21 Javascript
vue引用外部JS的两种种方法
2020/01/28 Javascript
angular组件间通讯的实现方法示例
2020/05/07 Javascript
js实现自定义右键菜单
2020/05/18 Javascript
[03:40]2014DOTA2国际邀请赛 B神专访:躲箭真的很难
2014/07/13 DOTA
[00:23]魔方之谜解锁款式
2018/12/20 DOTA
python函数缺省值与引用学习笔记分享
2013/02/10 Python
自己编程中遇到的Python错误和解决方法汇总整理
2015/06/03 Python
分享Python开发中要注意的十个小贴士
2016/08/30 Python
详解Python3网络爬虫(二):利用urllib.urlopen向有道翻译发送数据获得翻译结果
2019/05/07 Python
java中的控制结构(if,循环)详解
2019/06/26 Python
基于python中__add__函数的用法
2019/11/25 Python
基于python爬取有道翻译过程图解
2020/03/31 Python
CSS3实现文字波浪线效果示例代码
2016/11/20 HTML / CSS
巴西备受欢迎的服装和生活方式品牌:FARM Rio
2020/02/04 全球购物
Yahoo-PHP面试题4
2012/05/05 面试题
JSF面试题:Jsf中导航的标签是什么
2013/04/20 面试题
测绘工程系学生的自我评价
2013/11/30 职场文书
物理系毕业生自荐书
2014/06/13 职场文书
法人授权委托书公证范本
2014/09/14 职场文书
大学毕业谢师宴致辞
2015/07/27 职场文书
2016年世界人口日宣传活动总结
2016/04/05 职场文书
nginx网站服务如何配置防盗链(推荐)
2021/03/31 Servers
SpringBoot深入分析讲解监听器模式下
2022/07/15 Java/Android