用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调用Java对象的方法
Oct 09 PHP
PHP编程与应用
Oct 09 PHP
PHP的password_hash()使用实例
Mar 17 PHP
php检测数组长度函数sizeof与count用法
Nov 17 PHP
php通过正则表达式记取数据来读取xml的方法
Mar 09 PHP
php保存任意网络图片到服务器的方法
Apr 14 PHP
简单谈谈PHP中strlen 函数
Feb 27 PHP
php 广告点击统计代码(php+mysql)
Feb 21 PHP
php使用QueryList轻松采集js动态渲染页面方法
Sep 11 PHP
laravel实现上传图片并在页面显示的例子
Oct 14 PHP
Laravel 实现在Blade模版中使用全局变量代替路径的例子
Oct 22 PHP
PHP实现文件上传后台处理脚本
Mar 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
在PHP3中实现SESSION的功能(一)
2006/10/09 PHP
FCKeditor添加自定义按钮
2008/03/27 PHP
用PHP连接MySQL代码的参数说明
2008/06/07 PHP
php入门学习知识点一 PHP与MYSql连接与查询
2011/07/14 PHP
PHP PDOStatement::bindColumn讲解
2019/01/30 PHP
jquery.combobox中文api和例子,修复了上面的小bug
2011/03/28 Javascript
JQuery.closest(),parent(),parents()寻找父结点
2012/02/17 Javascript
js 编码转换 gb2312 和 utf8 互转的2种方法
2013/08/07 Javascript
基于jquery实现的省市区级联无ajax
2013/09/24 Javascript
关于数据与后端进行交流匹配(点亮星星)
2016/08/03 Javascript
微信小程序 页面之间传参实例详解
2017/01/13 Javascript
Node.js中看JavaScript的引用
2017/04/22 Javascript
Vue学习笔记进阶篇之vue-router安装及使用方法
2017/07/19 Javascript
bootstrap table插件的分页与checkbox使用详解
2017/07/23 Javascript
OkHttp踩坑随笔为何 response.body().string() 只能调用一次
2018/01/08 Javascript
写一个移动端惯性滑动&amp;回弹Vue导航栏组件 ly-tab
2018/03/06 Javascript
深入理解JavaScript和TypeScript中的class
2018/04/22 Javascript
详解vue中router-link标签所必备了解的属性
2019/04/15 Javascript
vue 解决遍历对象显示的顺序不对问题
2019/11/07 Javascript
vue+Element-ui前端实现分页效果
2020/11/15 Javascript
解决vue elementUI 使用el-select 时 change事件的触发问题
2020/11/17 Vue.js
Python检测生僻字的实现方法
2016/10/23 Python
详解用Python处理HTML转义字符的5种方式
2017/12/27 Python
TensorFlow实现Logistic回归
2018/09/07 Python
Python3使用腾讯云文字识别(腾讯OCR)提取图片中的文字内容实例详解
2020/02/18 Python
Django中ORM的基本使用教程
2020/12/22 Python
CSS3实现的渐变幻灯片效果
2020/12/07 HTML / CSS
HTML5进度条特效
2014/12/18 HTML / CSS
使用spring mvc+localResizeIMG实现HTML5端图片压缩上传的功能
2016/12/16 HTML / CSS
教育专业自荐书范文
2013/12/17 职场文书
实用的简历自我评价
2014/03/06 职场文书
兴趣小组活动总结
2014/05/05 职场文书
个人政风行风自查自纠报告
2014/10/21 职场文书
汽车转让协议书范本
2014/12/07 职场文书
优秀党员申报材料
2014/12/18 职场文书
nginx lua 操作 mysql
2022/05/15 Servers