用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 相关文章推荐
php strtotime 函数UNIX时间戳
Jan 14 PHP
处理php自动反斜杠的函数代码
Jan 05 PHP
php防攻击代码升级版
Dec 29 PHP
PHP Global变量定义当前页面的全局变量实现探讨
Jun 05 PHP
PHP如何将log信息写入服务器中的log文件
Jul 29 PHP
PHP读取大文件的多种方法介绍
Apr 04 PHP
PHP正则匹配反斜杠'\'和美元'$'的方法
Feb 08 PHP
ThinkPHP下表单令牌错误与解决方法分析
May 20 PHP
PHP实现正则匹配所有括号中的内容
Jun 22 PHP
YII2.0框架行为(Behavior)深入详解
Jul 26 PHP
PHP实现单文件、多个单文件、多文件上传函数的封装示例
Sep 02 PHP
php png失真的原因及解决办法
Nov 17 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
PHP中Memcache操作类及用法实例
2014/12/12 PHP
PHP使用array_multisort对多个数组或多维数组进行排序
2014/12/16 PHP
Yii2框架实现登录、退出及自动登录功能的方法详解
2017/10/24 PHP
实用javaScript技术-屏蔽类
2006/08/15 Javascript
javascript 出生日期和身份证判断大全
2008/11/13 Javascript
详谈 Jquery Ajax异步处理Json数据.
2011/09/09 Javascript
5个javascript的数字格式化函数分享
2011/12/07 Javascript
javascript 文本框水印/占位符(watermark/placeholder)实现方法
2012/01/15 Javascript
cument.execCommand()用法深入理解
2012/12/04 Javascript
JQuery的AJAX实现文件下载的小例子
2013/05/15 Javascript
js操作iframe的一些方法介绍
2013/06/25 Javascript
jQuery表格排序组件-tablesorter使用示例
2014/05/26 Javascript
jQuery简单实现仿京东商城的左侧菜单效果代码
2015/09/09 Javascript
深入浅析JavaScript中with语句的理解
2016/05/12 Javascript
Bootstrap源码解读按钮(5)
2016/12/23 Javascript
JS对象的深度克隆方法示例
2017/03/16 Javascript
Javarscript中模块(module)、加载(load)与捆绑(bundle)详解
2017/05/28 Javascript
解决vue项目中type=”file“ change事件只执行一次的问题
2018/05/16 Javascript
微信小程序下拉刷新PullDownRefresh的使用方法
2018/11/29 Javascript
Vuepress 搭建带评论功能的静态博客的实现
2019/02/17 Javascript
vue项目中使用AES实现密码加密解密(ECB和CBC两种模式)
2019/08/12 Javascript
React学习之受控组件与数据共享实例分析
2020/01/06 Javascript
webpack.DefinePlugin与cross-env区别详解
2020/02/23 Javascript
pydev使用wxpython找不到路径的解决方法
2013/02/10 Python
Python中的二叉树查找算法模块使用指南
2014/07/04 Python
用Python写王者荣耀刷金币脚本
2017/12/21 Python
Python使用pandas处理CSV文件的实例讲解
2018/06/22 Python
PyTorch中反卷积的用法详解
2019/12/30 Python
新年福利来一波之Python轻松集齐五福(demo)
2020/01/20 Python
python代码xml转txt实例
2020/03/10 Python
CheapTickets泰国:廉价航班,查看促销价格并预订机票
2019/12/28 全球购物
小学生十佳少年事迹材料
2014/08/20 职场文书
专题组织生活会思想汇报
2014/10/01 职场文书
部门2015年度工作总结
2015/04/29 职场文书
党员身份证明材料
2015/06/19 职场文书
Nginx反向代理、重定向
2022/04/13 Servers