用PHP的socket实现客户端到服务端的通信实例详解


Posted in PHP onFebruary 04, 2017

一、server.php服务端:

<?php 
error_reporting(E_ALL); 
set_time_limit(0); 
ob_implicit_flush(); 
//本地IP 
$address = 'localhost'; 
//设置用111端口进行通信 
$port = 111; 
//创建SOCKET 
if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) { 
    echo "socket创建失败原因 " . socket_strerror($sock) . "\n"; 
} 
 
if (($ret = socket_bind($sock, $address, $port)) < 0) { 
    echo "创建套接字失败原因 " . socket_strerror($ret) . "\n"; 
} 
//监听 
if (($ret = socket_listen($sock, 5)) < 0) { 
    echo "监听失败原因 " . socket_strerror($ret) . "\n"; 
} 
do { 
  //接收命令  
  if (($msgsock = @socket_accept($sock)) < 0) { 
    echo "命令接收失败原因: " . socket_strerror($msgsock) . "\n"; 
    break; 
  } 
  $msg = "\nPHP Test Server. \n" ."用quit,shutdown,sun...等命令测试.\n"; 
 
  @socket_write($msgsock, $msg, strlen($msg)); 
 
  do { 
    if (false === ($buf = @socket_read($msgsock, 2048, PHP_NORMAL_READ))) { 
        echo "socket_read() failed: reason: " . socket_strerror($ret) . "\n"; 
        break 2; 
    } 
    if (!$buf = trim($buf)) { 
        continue; 
    } 
    if ($buf == 'quit') { 
        break; 
    } 
    if ($buf == 'shutdown') { 
        socket_close($msgsock); 
        break 2; 
    } 
    if ($buf == 'sun') { 
        echo'what are you doing?'; 
    } 
    $talkback = "Backinformation : '$buf'.\n"; 
    socket_write($msgsock, $talkback, strlen($talkback)); 
    echo "$buf\n"; 
  } while (true); 
 
  socket_close($msgsock); 
 
} while (true); 
 
socket_close($sock); 
?>

二、client.php客户端:

<?php 
error_reporting(E_ALL); 
//端口111 
$service_port = 111; 
//本地 
$address = 'localhost'; 
//创建 TCP/IP socket 
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); 
if ($socket < 0) { 
    echo "socket创建失败原因: " . socket_strerror($socket) . "\n"; 
} else { 
    echo "OK,HE HE.\n"; 
} 
$result = socket_connect($socket, $address, $service_port); 
if ($result < 0) { 
    echo "SOCKET连接失败原因: ($result) " . socket_strerror($result) . "\n"; 
} else { 
    echo "OK.\n"; 
} 
//发送命令 
$in = "HEAD / HTTP/1.1\r\n"; 
$in .= "Connection: Close\r\n\r\n"; 
$out = ''; 
echo "Send Command.........."; 
$in = "sun\n"; 
socket_write($socket, $in, strlen($in)); 
echo "OK.\n"; 
echo "Reading Backinformatin:\n\n"; 
while ($out = socket_read($socket, 2048)) { 
    echo $out; 
} 
echo "Close socket........"; 
socket_close($socket); 
echo "OK,He He.\n\n"; 
?>

这两段代码是简单介绍用PHP实现客户端和服务端的通信

具体操作,在DOS下用PHP命令打开SERVER,处于监听状态..

再打开一个DOS窗口,用PHP命令打开CLIENT,会得到服务端的回应....

用PHP的socket实现客户端到服务端的通信实例详解

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
经典的PHPer为什么被认为是草根?
Apr 02 PHP
用php实现批量查询清除一句话后门的代码
Jan 20 PHP
php中error与exception的区别及应用
Jul 28 PHP
php过滤HTML标签、属性等正则表达式汇总
Sep 22 PHP
round robin权重轮循算法php实现代码
May 28 PHP
PHP入门教程之数组用法汇总(创建,删除,遍历,排序等)
Sep 11 PHP
php获取当前月与上个月月初及月末时间戳的方法
Dec 05 PHP
php简单实现文件或图片强制下载的方法
Dec 06 PHP
PHP常用排序算法实例小结【基本排序,冒泡排序,快速排序,插入排序】
Feb 07 PHP
php打开本地exe程序,js打开本地exe应用程序,并传递相关参数方法
Feb 06 PHP
PHP验证类的封装与使用方法详解
Jan 10 PHP
PHP 自动加载类原理与用法实例分析
Apr 14 PHP
关于PHP内置的字符串处理函数详解
Feb 04 #PHP
详谈PHP面向对象中常用的关键字和魔术方法
Feb 04 #PHP
浅谈PHP中的错误处理和异常处理
Feb 04 #PHP
详谈PHP中的密码安全性Password Hashing
Feb 04 #PHP
php、mysql查询当天,查询本周,查询本月的数据实例(字段是时间戳)
Feb 04 #PHP
PHP水印类,支持添加图片、文字、填充颜色区域的实现
Feb 04 #PHP
Yii2下session跨域名共存的解决方案
Feb 04 #PHP
You might like
上传文件先创建目录 再上传到目录里面去
2010/12/29 PHP
php保存二进制原始数据为图片的程序代码
2014/10/14 PHP
PHP连接操作access数据库实例
2015/03/30 PHP
PHP的Yii框架的基本使用示例
2015/08/21 PHP
在IE上直接编辑网页内容的js代码(IE地址栏js)
2009/04/27 Javascript
让GoogleCode的SVN下的HTML文件在FireFox下正常显示.
2009/05/25 Javascript
jquery 插件学习(三)
2012/08/06 Javascript
javascript生成json数据简单示例分享
2014/02/14 Javascript
Atitit.js的键盘按键事件捆绑and事件调度
2016/04/01 Javascript
JavaScript动态绑定详解
2017/09/14 Javascript
微信页面弹出键盘后iframe内容变空白的解决方案
2017/09/20 Javascript
浅谈webpack打包之后的文件过大的解决方法
2018/03/07 Javascript
微信小程序自定义可滑动日历界面
2018/12/28 Javascript
Vue中的验证登录状态的实现方法
2019/03/09 Javascript
JavaScript自定义超时API代码实例
2020/04/30 Javascript
Vue.js中使用Vuex实现组件数据共享案例
2020/07/31 Javascript
搞笑的程序猿:看看你是哪种Python程序员
2015/06/12 Python
学习python 之编写简单乘法运算题
2016/02/27 Python
Python使用gensim计算文档相似性
2016/04/10 Python
Python进阶学习之特殊方法实例详析
2017/12/01 Python
解决python使用open打开文件中文乱码的问题
2017/12/29 Python
python数据结构之线性表的顺序存储结构
2018/09/28 Python
python 实现批量xls文件转csv文件的方法
2018/10/23 Python
浅谈Pycharm最有必要改的几个默认设置项
2020/02/14 Python
Python Tkinter图形工具使用方法及实例解析
2020/06/15 Python
吃透移动端 Html5 响应式布局
2019/12/16 HTML / CSS
HTML5 body设置自适应全屏
2020/05/07 HTML / CSS
Melijoe美国官网:法国奢侈童装购物网站
2017/04/19 全球购物
Sneaker Studio乌克兰:购买运动鞋
2018/03/26 全球购物
沙特阿拉伯家用电器和电子产品购物网站:Sheta and Saif
2020/04/03 全球购物
汽车广告策划方案
2014/05/31 职场文书
小学班主任自我评价
2015/03/11 职场文书
初二数学教学反思
2016/02/17 职场文书
安全责任协议书范本
2016/03/23 职场文书
MySQL中的引号和反引号的区别与用法详解
2021/10/24 MySQL
shell进度条追踪指令执行时间的场景分析
2022/06/16 Servers