用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用strstr()函数阻止垃圾评论(通过判断a标记)
Sep 28 PHP
php+js iframe实现上传头像界面无跳转
Apr 29 PHP
PHP根据传入参数合并多个JS和CSS文件的简单实现
Jun 13 PHP
Chrome Web App开发小结
Sep 04 PHP
php文件下载处理方法分析
Apr 22 PHP
PHP curl使用实例
Jul 02 PHP
Android App中DrawerLayout抽屉效果的菜单编写实例
Mar 21 PHP
如何使用php等比例缩放图片
Oct 12 PHP
Yii 2.0如何使用页面缓存方法示例
May 23 PHP
PHP实现git部署的方法教程
Dec 19 PHP
PHP设计模式(四)原型模式Prototype实例详解【创建型】
May 02 PHP
php 利用socket发送GET,POST请求的实例代码
Jul 04 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面向对象全攻略 (八)重载新的方法
2009/09/30 PHP
PHP 异步执行方法,模拟多线程的应用分析
2013/06/03 PHP
JS中style属性
2006/10/11 Javascript
javascript中声明函数的方法及调用函数的返回值
2014/07/22 Javascript
jQuery实现锚点scoll效果实例分析
2015/03/10 Javascript
解析js如何获取css样式
2016/12/11 Javascript
Angular1.x复杂指令实例详解
2017/03/01 Javascript
将angular-ui的分页组件封装成指令的方法详解
2017/05/10 Javascript
微信小程序简单实现form表单获取输入数据功能示例
2017/11/30 Javascript
Vue常用指令详解分析
2018/08/19 Javascript
对Vue- 动态元素属性及v-bind和v-model的区别详解
2018/08/27 Javascript
浅谈React之状态(State)
2018/09/19 Javascript
vue-router 手势滑动触发返回功能
2018/09/30 Javascript
微信小程序实现单选功能
2018/10/30 Javascript
使用canvas实现一个vue弹幕组件功能
2018/11/30 Javascript
JS数组Object.keys()方法的使用示例
2019/06/05 Javascript
在node环境下parse Smarty模板的使用示例代码
2019/11/15 Javascript
vue添加锚点,实现滚动页面时锚点添加相应的class操作
2020/08/10 Javascript
在Vue中使用mockjs代码实例
2020/11/25 Vue.js
[43:43]完美世界DOTA2联赛PWL S2 FTD.C vs Rebirth 第一场 11.22
2020/11/24 DOTA
对dataframe进行列相加,行相加的实例
2018/06/08 Python
python中的turtle库函数简单使用教程
2018/07/23 Python
python可视化实现代码
2019/01/15 Python
Django CBV类的用法详解
2019/07/26 Python
详解从Django Allauth中进行登录改造小结
2019/12/18 Python
Html5游戏开发之乒乓Ping Pong游戏示例(二)
2013/01/21 HTML / CSS
美国大城市最热门旅游景点门票:CityPASS
2016/12/16 全球购物
《桃林那间小木屋》教学反思
2014/05/01 职场文书
安全月活动总结
2014/05/05 职场文书
中国梦演讲稿开场白
2014/08/28 职场文书
纪检干部个人对照检查材料
2014/09/23 职场文书
社区班子个人对照检查材料思想汇报
2014/10/07 职场文书
2015秋季幼儿园开学通知
2015/07/16 职场文书
毕业生入职感言
2015/07/31 职场文书
大队委员竞选稿
2015/11/20 职场文书
九大龙王魂骨,山龙王留下躯干骨,榜首死的最憋屈(被捏碎)
2022/03/18 国漫