基于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 相关文章推荐
PHP CKEditor 上传图片实现代码
Nov 06 PHP
PHP性能优化工具篇Benchmark类调试执行时间
Dec 06 PHP
注意:php5.4删除了session_unregister函数
Aug 05 PHP
php环境套包 dedeampz 伪静态设置示例
Mar 26 PHP
PHP、Python和Javascript的装饰器模式对比
Feb 03 PHP
PHP JSON格式的中文显示问题解决方法
Apr 09 PHP
PHP使用flock实现文件加锁的方法
Jul 01 PHP
详解WordPress中分类函数wp_list_categories的使用
Jan 04 PHP
PHP实现读取文件夹及批量重命名文件操作示例
Apr 15 PHP
laravel 根据不同组织加载不同视图的实现
Oct 14 PHP
PHP如何使用cURL实现Get和Post请求
Jul 11 PHP
如何通过Apache在本地配置多个虚拟主机
Jul 29 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
珊瑚虫IP库浅析
2007/02/15 PHP
php实现的简单压缩英文字符串的代码
2008/04/24 PHP
php自定义截取中文字符串-utf8版
2017/02/27 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
2017/09/15 PHP
SyntaxHighlighter语法高亮插件使用说明
2011/08/14 Javascript
商城常用滚动的焦点图效果代码简单实用
2013/03/28 Javascript
jquery中get和post的简单实例
2014/02/04 Javascript
Express.JS使用详解
2014/07/17 Javascript
DOM基础教程之使用DOM
2015/01/19 Javascript
jQuery循环动画与获取组件尺寸的方法
2015/02/02 Javascript
js显示当前日期时间和星期几
2015/10/22 Javascript
js不间断滚动的简单实现
2016/06/03 Javascript
很酷的星级评分系统原生JS实现
2016/08/25 Javascript
NodeJS实现客户端js加密
2017/01/09 NodeJs
JavaScript中无法通过div.style.left获取值的解决方法
2017/02/19 Javascript
React中常见的动画实现的几种方式
2018/01/10 Javascript
js利用拖放实现添加删除
2020/08/27 Javascript
Vue+Java 通过websocket实现服务器与客户端双向通信操作
2020/09/22 Javascript
移动端JS实现拖拽两种方法解析
2020/10/12 Javascript
python 中random模块的常用方法总结
2017/07/08 Python
python如何实现内容写在图片上
2018/03/23 Python
numpy 对矩阵中Nan的处理:采用平均值的方法
2018/10/30 Python
Python爬虫实现获取动态gif格式搞笑图片的方法示例
2018/12/24 Python
python利用thrift服务读取hbase数据的方法
2018/12/27 Python
树莓派用python中的OpenCV输出USB摄像头画面
2019/06/22 Python
django框架cookie和session用法实例详解
2019/12/10 Python
Django重设Admin密码过程解析
2020/02/10 Python
关于keras.layers.Conv1D的kernel_size参数使用介绍
2020/05/22 Python
WiFi云数码相框:Nixplay
2018/07/05 全球购物
英国在线滑雪板和冲浪商店:The Board Basement
2020/01/11 全球购物
一些关于MySql加速和优化的面试题
2014/01/30 面试题
小区门卫管理制度
2014/01/29 职场文书
教师绩效工资方案
2014/02/01 职场文书
学生打架检讨书
2014/10/20 职场文书
2014年学校党建工作汇报材料
2014/11/02 职场文书
Mysql忘记密码解决方法
2022/02/12 MySQL