基于php socket(fsockopen)的应用实例分析


Posted in PHP onJune 02, 2013

fsockopen函数能够运用,首先要开启php.ini中的allow_url_open=on;
fsockopen是对socket客户端代码的封装,该函数中封装了socket_create,socket_connect。
服务器端代码:server.php

<?php
error_reporting(E_ALL);
set_time_limit(0);
$address = '127.0.0.1';
$port = 10008;
//创建端口
if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {
echo "socket_create() failed:reason:" . socket_strerror(socket_last_error()) . "\n";
}
//绑定
if (socket_bind($sock, $address, $port) === false) {
echo "socket_bind() failed :reason:" . socket_strerror(socket_last_error($sock)) . "\n";
}
//监听
if (socket_listen($sock, 5) === false) {
echo "socket_bind() failed :reason:" . socket_strerror(socket_last_error($sock)) . "\n";
}
while (true) {
//得到一个链接
if (($msgsock = socket_accept($sock)) === false) {
echo "socket_accepty() failed :reason:".socket_strerror(socket_last_error($sock)) . "\n";
break;
}
//welcome 发送到客户端
$msg = "1.<font color='red'>server send:welcome</font><br/>";
socket_write($msgsock, $msg, strlen($msg)); //返回信息给客户端
echo 'read client message\n';
$buf = socket_read($msgsock, 8192); //获取客户端发送过来的信息
$talkback = "2.received message:$buf\n";
echo $talkback;
if (false === socket_write($msgsock, $talkback, strlen($talkback))) { //返回信息给客户端
echo "socket_write() failed reason:" . socket_strerror(socket_last_error($sock)) ."\n";
} else {
echo 'send success';
}
socket_close($msgsock);
}
socket_close($sock);

客户端代码:fsocket.php
<?php
$fp = fsockopen("127.0.0.1", 10008, &$errno, &$errstr, 10);
if (!$fp) {
echo $errstr . " (". $errno . ")<br>n";
} else {
$in = "HEAD / http/1.1\r\n";
$in .= "HOST: localhost \r\n";
$in .= "Connection: close\r\n\r\n";
fputs($fp, $in);
while (!feof($fp)) {
echo fgets($fp, 128);
}
fclose($fp);
}

PHP 相关文章推荐
全文搜索和替换
Oct 09 PHP
网络资源
Oct 09 PHP
php fsockopen中多线程问题的解决办法[翻译]
Nov 09 PHP
深入php函数file_get_contents超时处理的方法详解
Jun 03 PHP
PHP获取服务器端信息的方法
Nov 28 PHP
php生成图片验证码
Jun 09 PHP
PHP计算当前坐标3公里内4个角落的最大最小经纬度实例
Feb 26 PHP
CI框架文件上传类及图像处理类用法分析
May 18 PHP
PHP数组操作实例分析【添加,删除,计算,反转,排序,查找等】
Dec 24 PHP
thinkphp3.2实现跨控制器调用其他模块的方法
Mar 14 PHP
PHP框架自动加载类文件原理详解
Jun 06 PHP
ThinkPHP框架实现导出excel数据的方法示例【基于PHPExcel】
May 12 PHP
深入PHP操作MongoDB的技术总结
Jun 02 #PHP
深入php数据采集的详解
Jun 02 #PHP
基于php下载文件的详解
Jun 02 #PHP
用PHP实现浏览器点击下载TXT文档的方法详解
Jun 02 #PHP
优化PHP代码技巧的小结
Jun 02 #PHP
PHP无限分类(树形类)的深入分析
Jun 02 #PHP
基于php无限分类的深入理解
Jun 02 #PHP
You might like
ThinkPHP采用实现三级循环代码实例
2014/07/18 PHP
PHP之sprintf函数用法详解
2014/11/12 PHP
PHP中SESSION的注销与清除
2015/04/16 PHP
php反射学习之不用new方法实例化类操作示例
2019/06/14 PHP
php 比较获取两个数组相同和不同元素的例子(交集和差集)
2019/10/18 PHP
提高 DHTML 页面性能
2006/12/25 Javascript
Flash+XML滚动新闻代码 无图片 附源码下载
2007/11/22 Javascript
jQuery右键菜单contextMenu使用实例
2011/09/28 Javascript
JavaScript 学习笔记之一jQuery写法图片等比缩放以及预加载
2012/06/28 Javascript
jQuery实现级联菜单效果(仿淘宝首页菜单动画)
2014/04/10 Javascript
Javascript实现简单二级下拉菜单实例
2014/06/15 Javascript
javascript下拉列表中显示树形菜单的实现方法
2015/11/17 Javascript
jquery ajax双击div可直接修改div中的内容
2016/03/04 Javascript
vue-router路由参数刷新消失的问题解决方法
2017/06/17 Javascript
基于Node.js模板引擎教程-jade速学与实战1
2017/09/17 Javascript
基于原生js运动方式关键点的总结(推荐)
2017/10/01 Javascript
详解JavaScript事件循环机制
2018/09/07 Javascript
解决js相同的正则多次调用test()返回的值却不同的问题
2018/10/10 Javascript
js实现全选反选不选功能代码详解
2019/04/24 Javascript
解决包含在label标签下的checkbox在ie8及以下版本点击事件无效果兼容的问题
2019/10/27 Javascript
js实现小时钟效果
2020/03/25 Javascript
VSCode 配置uni-app的方法
2020/07/11 Javascript
Python中random模块用法实例分析
2015/05/19 Python
Python通过90行代码搭建一个音乐搜索工具
2015/07/29 Python
python reduce 函数使用详解
2017/12/05 Python
TensorFlow实现iris数据集线性回归
2018/09/07 Python
详解pandas的外部数据导入与常用方法
2019/05/01 Python
利用CSS3参考手册和CSS3代码生成工具加速来学习网页制
2012/07/11 HTML / CSS
俄罗斯有趣和原创礼物网上商店:MagicMag
2019/08/01 全球购物
广州足迹信息技术有限公司Java软件工程师试题
2014/02/15 面试题
计算机专业求职信
2014/06/02 职场文书
运动会演讲稿200字
2014/08/25 职场文书
公司合并协议书范本
2014/09/30 职场文书
合伙购房协议样本
2014/10/06 职场文书
工作后的感想
2015/08/07 职场文书
CSS list-style-type属性使用方法
2023/05/21 HTML / CSS