用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产生随机字符串函数
Dec 06 PHP
php 删除无限级目录与文件代码共享
Nov 22 PHP
php5 non-thread-safe和thread-safe这两个版本的区别分析
Mar 13 PHP
PHP把网页保存为word文件的三种方法
Apr 01 PHP
php警告Creating default object from empty value 问题的解决方法
Apr 02 PHP
PHP基于CURL进行POST数据上传实例
Nov 10 PHP
php图片处理函数获取类型及扩展名实例
Nov 19 PHP
PHP图像处理类库及演示分享
May 17 PHP
PHP响应post请求上传文件的方法
Dec 17 PHP
php字符串操作针对负值的判断分析
Jul 28 PHP
thinkPHP中_initialize方法实例分析
Dec 05 PHP
php + WebUploader实现图片批量上传功能
May 06 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字符串截取函数用法分析
2014/11/25 PHP
详解php 使用Callable Closure强制指定回调类型
2017/10/26 PHP
JavaScript 基础问答三
2008/12/03 Javascript
JQuery 自定义CircleAnimation,Animate方法学习笔记
2011/07/10 Javascript
用Javascript评估用户输入密码的强度(Knockout版)
2011/11/30 Javascript
分享一个用Mootools写的鼠标滑过进度条改变进度值的实现代码
2011/12/12 Javascript
通过正则格式化url查询字符串实现代码
2012/12/28 Javascript
Node.js中HTTP模块与事件模块详解
2014/11/14 Javascript
jQuery on()方法绑定动态元素的点击事件无响应的解决办法
2016/07/07 Javascript
js中用cssText设置css样式的简单方法
2016/09/19 Javascript
jQuery得到多个值只能用取Class ,不能用取ID的方法
2016/12/04 Javascript
JS实现下拉菜单列表与登录注册弹窗效果
2017/08/10 Javascript
Angular5集成eventbus的示例代码
2018/07/19 Javascript
jQuery实现获取当前鼠标位置并输出功能示例
2019/01/05 jQuery
vue setInterval 定时器失效的解决方式
2020/07/30 Javascript
toString.call()通用的判断数据类型方法示例
2020/08/28 Javascript
基于Python实现的百度贴吧网络爬虫实例
2015/04/17 Python
深度定制Python的Flask框架开发环境的一些技巧总结
2016/07/12 Python
Python计算两个日期相差天数的方法示例
2017/05/23 Python
Python获取指定字符前面的所有字符方法
2018/05/02 Python
用python实现k近邻算法的示例代码
2018/09/06 Python
django 数据库 get_or_create函数返回值是tuple的问题
2020/05/15 Python
通过HTML5规范搞定i、em、b、strong元素的区别
2017/03/04 HTML / CSS
PHP面试题大全
2015/10/16 面试题
CSS实现fullpage.js全屏滚动效果的示例代码
2021/03/24 HTML / CSS
移动通信行业实习自我鉴定
2013/09/28 职场文书
家长给孩子的表扬信
2014/01/17 职场文书
医院辞职信范文
2014/01/17 职场文书
2014年商场超市庆元旦活动方案
2014/02/14 职场文书
《放小鸟》教学反思
2014/04/20 职场文书
财务人员担保书
2014/05/13 职场文书
2014年小学数学教师工作总结
2014/12/03 职场文书
幼儿园大班教师个人工作总结
2015/02/05 职场文书
2015年质量管理工作总结范文
2015/05/18 职场文书
驾驶员管理制度范本
2015/08/06 职场文书
关于SpringBoot 使用 Redis 分布式锁解决并发问题
2021/11/17 Redis