用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防注入代码
Apr 07 PHP
PHP imagecreatefrombmp 从BMP文件或URL新建一图像
Jul 16 PHP
PHP利用REFERER根居访问来地址进行页面跳转
Sep 28 PHP
zend framework框架中url大小写问题解决方法
Aug 19 PHP
使用PHP和HTML5 FormData实现无刷新文件上传教程
Sep 06 PHP
PHP记录搜索引擎蜘蛛访问网站足迹的方法
Apr 15 PHP
php实现比较全的数据库操作类
Jun 18 PHP
php基于双向循环队列实现历史记录的前进后退等功能
Aug 08 PHP
两种php实现图片上传的方法
Jan 22 PHP
利用PHP绘图函数实现简单验证码功能的方法
Oct 18 PHP
解决Laravel 不能创建 migration 的问题
Oct 09 PHP
thinkPHP事务操作简单案例分析
Oct 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
Discuz板块横排显示图片的实现方法
2007/05/28 PHP
解析PHP中的unset究竟会不会释放内存
2013/07/18 PHP
php调用KyotoTycoon简单实例
2015/04/02 PHP
javascript下判断一个元素是否存在的代码
2010/03/05 Javascript
基于JQuery的浮动DIV显示提示信息并自动隐藏
2011/02/11 Javascript
通过AJAX的JS、JQuery两种方式解析XML示例介绍
2013/09/23 Javascript
封装的jquery翻页滚动(示例代码)
2013/11/18 Javascript
基于jquery实现图片上传本地预览功能
2016/01/08 Javascript
JS仿百度自动下拉框模糊匹配提示
2016/07/25 Javascript
关于JS中二维数组的声明方法
2016/09/24 Javascript
jquery checkbox的相关操作总结
2016/10/17 Javascript
微信小程序 教程之WXML
2016/10/18 Javascript
jQuery实现表格与ckeckbox的全选与单选功能
2016/11/24 Javascript
无阻塞加载js,防止因js加载不了影响页面显示的问题
2016/12/18 Javascript
bootstrap+jquery项目引入文件报错的解决方法
2018/01/22 jQuery
解决vue项目中type=”file“ change事件只执行一次的问题
2018/05/16 Javascript
深入浅析Vue全局组件与局部组件的区别
2018/06/15 Javascript
vue.js的简单自动求和计算实例
2019/11/08 Javascript
JS轮播图的实现方法
2020/08/24 Javascript
在Linux下调试Python代码的各种方法
2015/04/17 Python
python求解水仙花数的方法
2015/05/11 Python
Python使用面向对象方式创建线程实现12306售票系统
2015/12/24 Python
详解python while 函数及while和for的区别
2018/09/07 Python
Python字典中的键映射多个值的方法(列表或者集合)
2018/10/17 Python
Python中的 is 和 == 以及字符串驻留机制详解
2019/06/28 Python
介绍一款python类型检查工具pyright(推荐)
2019/07/03 Python
Python正则表达式急速入门(小结)
2019/12/16 Python
python代码区分大小写吗
2020/06/17 Python
sublime3之内网安装python插件Anaconda的流程
2020/11/10 Python
美国瑜伽品牌:Gaiam
2017/10/31 全球购物
美国在线咖啡、茶和餐厅供应商:LollicupStore
2018/05/04 全球购物
药学专业大学生个人的自我评价
2013/11/04 职场文书
校三好学生主要事迹
2014/01/11 职场文书
春秋淹城导游词
2015/02/11 职场文书
接待员岗位职责范本
2015/04/15 职场文书
CentOS7和8下安装Maven3.8.4
2022/04/07 Servers