用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 ftp文件上传函数(基础版)
Jun 03 PHP
PHP面向对象概念
Nov 06 PHP
php错误、异常处理机制(补充)
May 07 PHP
浅析PKI加密解密 OpenSSL
Jul 01 PHP
ThinkPHP在新浪SAE平台的部署实例
Oct 31 PHP
php+xml编程之xpath的应用实例
Jan 24 PHP
php的4种常见运行方式
Mar 20 PHP
php提交表单时保留多个空格及换行的文本样式的方法
Jun 20 PHP
php实现的pdo公共类定义与用法示例
Jul 19 PHP
PHP基于堆栈实现的高级计算器功能示例
Sep 15 PHP
Laravel 将数据表的数据导出,并生成seeds种子文件的方法
Oct 09 PHP
Laravel相关的一些故障解决
Aug 19 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
jq的get传参数在utf-8中乱码问题的解决php版
2008/07/23 PHP
分享一下贝贝成长进度的php代码
2012/09/14 PHP
解析PHP函数array_flip()在重复数组元素删除中的作用
2013/06/27 PHP
PHP实现加强版加密解密类实例
2015/07/29 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
2017/09/21 PHP
JS按字节截取字符长度实例
2013/11/20 Javascript
Javascript对象属性方法汇总
2013/11/21 Javascript
Jquery 在页面加载后执行的几种方式
2014/03/14 Javascript
javascript中为某个元素指定事件的三种方式
2014/08/07 Javascript
JavaScript中的console.trace()函数介绍
2014/12/29 Javascript
JS实现新浪博客左侧的Blog管理菜单效果代码
2015/10/22 Javascript
js读取并解析JSON类型数据的方法
2015/11/14 Javascript
JS实现鼠标滑过显示边框的菜单效果
2016/09/21 Javascript
Express+Nodejs 下的登录拦截实现代码
2017/07/01 NodeJs
解决eclipse中没有js代码提示的问题
2018/10/10 Javascript
Vue 事件处理操作实例详解
2019/03/05 Javascript
Vue中computed、methods与watch的区别总结
2019/04/10 Javascript
解决vue页面渲染但dom没渲染的操作
2020/07/27 Javascript
vue 公共列表选择组件,引用Vant-UI的样式方式
2020/11/02 Javascript
python thread 并发且顺序运行示例
2009/04/09 Python
python函数式编程学习之yield表达式形式详解
2018/03/25 Python
django从请求到响应的过程深入讲解
2018/08/01 Python
详解Python正则表达式re模块
2019/03/19 Python
HTML5+CSS3实现无插件拖拽上传图片(支持预览与批量)
2017/01/05 HTML / CSS
基于HTML5代码实现折叠菜单附源码下载
2015/11/27 HTML / CSS
英国女性时尚精品店:THE DRESSING ROOM
2018/05/23 全球购物
厂办主管岗位职责范本
2014/02/28 职场文书
五一手机促销方案
2014/03/08 职场文书
服务承诺口号
2014/05/22 职场文书
全运会口号
2014/06/20 职场文书
自荐信格式范文
2015/03/04 职场文书
工作态度怎么写
2015/06/25 职场文书
如何利用JavaScript实现二叉搜索树
2021/04/02 Javascript
python如何利用traceback获取详细的异常信息
2021/06/05 Python
怎么禁用Windows 11快照布局? win11不使用快照布局的技巧
2021/11/21 数码科技
vue 自定义的组件绑定点击事件
2022/04/21 Vue.js