用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摘要生成函数(无乱码)
Feb 04 PHP
PHP将整个网站生成HTML纯静态网页的方法总结
Feb 05 PHP
PHP中怎样保持SESSION不过期 原理及方案介绍
Aug 08 PHP
PHP+shell实现多线程的方法
Jul 01 PHP
Yii CGridView用法实例详解
Jul 12 PHP
利用PHP自动生成印有用户信息的名片
Aug 01 PHP
PHP实现将MySQL重复ID二维数组重组为三维数组的方法
Aug 01 PHP
EarthLiveSharp中cloudinary的CDN图片缓存自动清理python脚本
Apr 04 PHP
PHP中Cookie的使用详解(简单易懂)
Apr 28 PHP
PHP实现合并两个排序链表的方法
Jan 19 PHP
laravel框架创建授权策略实例分析
Nov 22 PHP
php实现的证件照换底色功能示例【人像抠图/换背景图】
May 29 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学习笔记 (1) 环境配置与代码调试
2011/06/19 PHP
PHP基础知识介绍
2013/09/17 PHP
详解PHP中的Traits
2015/07/29 PHP
PHP微信开发用Cache 解决数据缓存
2016/07/11 PHP
PHP实现将base64编码字符串转换成图片示例
2018/06/22 PHP
php7连接MySQL实现简易查询程序的方法
2020/10/13 PHP
php中array_fill函数的实例用法
2021/03/02 PHP
javascript 多浏览器 事件大全
2010/03/23 Javascript
jquery不会自动回收xmlHttpRequest对象 导致了内存溢出
2012/06/18 Javascript
event对象获取方法总结在google浏览器下测试
2013/11/03 Javascript
Node.js和PHP根据ip获取地理位置的方法
2014/03/14 Javascript
JS合并数组的几种方法及优劣比较
2014/09/19 Javascript
javascript实现完美拖拽效果
2015/05/06 Javascript
jQuery插件bgStretcher.js实现全屏背景特效
2015/06/05 Javascript
Node.js中的process.nextTick使用实例
2015/06/25 Javascript
js时间戳转为日期格式的方法
2015/12/28 Javascript
js事件处理程序跨浏览器解决方案
2016/03/27 Javascript
jQuery基础_入门必看知识点
2016/07/04 Javascript
js 获取当前web应用的上下文路径实现方法
2016/08/19 Javascript
分享Bootstrap简单表格、表单、登录页面
2017/08/04 Javascript
js中的闭包学习心得
2018/02/06 Javascript
详解自定义ajax支持跨域组件封装
2018/02/08 Javascript
vue使用中的内存泄漏【推荐】
2018/07/10 Javascript
默认浏览器设置及vue自动打开页面的方法
2018/09/21 Javascript
微信小程序视频弹幕发送功能的实现
2020/12/28 Javascript
python实现socket客户端和服务端简单示例
2014/02/24 Python
Python3中的真除和Floor除法用法分析
2016/03/16 Python
JPype实现在python中调用JAVA的实例
2017/07/19 Python
python入门:这篇文章带你直接学会python
2018/09/14 Python
利用Pycharm断点调试Python程序的方法
2018/11/29 Python
全球性的在线婚纱礼服工厂:27dress.com
2019/03/21 全球购物
2014初中数学教研组工作总结
2014/12/19 职场文书
病人写给医生的感谢信
2015/01/23 职场文书
Navicat for MySQL的使用教程详解
2021/05/27 MySQL
深入理解CSS 中 transform matrix矩阵变换问题
2021/08/30 HTML / CSS
MySQL 语句执行顺序举例解析
2022/06/05 MySQL