用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 相关文章推荐
数据库中排序的对比及使用条件详解
Feb 23 PHP
php修改NetBeans默认字体的大小
Jul 02 PHP
浅谈PHP调用Webservice思路及源码分享
Jun 04 PHP
PHP判断是否为空的几个函数对比
Apr 21 PHP
PHP处理会话函数大总结
Aug 05 PHP
判断、添加和删除WordPress置顶文章的相关PHP函数小结
Dec 10 PHP
简单了解将WordPress中的工具栏移到底部的小技巧
Dec 31 PHP
PHP最常用的正则表达式
Feb 13 PHP
PHP数组内存利用率低和弱类型详细解读
Aug 10 PHP
thinkPHP5实现数据库添加内容的方法
Oct 25 PHP
深入学习微信网址链接解封的防封原理visit_type
Aug 15 PHP
phpinfo的知识点总结
Oct 10 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
ThinkPHP中pathinfo的访问模式、路径访问模式及URL重写总结
2014/08/23 PHP
php判断文件夹是否存在不存在则创建
2015/04/09 PHP
php中switch语句用法详解
2015/08/17 PHP
PHP实现网站应用微信登录功能详解
2019/04/11 PHP
PHP数组array类常见操作示例
2020/05/15 PHP
php实现的证件照换底色功能示例【人像抠图/换背景图】
2020/05/29 PHP
RR vs IO BO3 第二场2.13
2021/03/10 DOTA
JavaScript 精粹读书笔记(1,2)
2010/02/07 Javascript
javascript利用初始化数据装配模版的实现代码
2010/11/17 Javascript
js 验证密码强弱的小例子
2013/03/21 Javascript
js通过地址栏给action传值(中文乱码全是问号)
2013/05/02 Javascript
javascript控制Div层透明属性由浅变深由深变浅逐渐显示
2013/11/12 Javascript
javascript中substring()、substr()、slice()的区别
2015/08/30 Javascript
JavaScript对Json的增删改属性详解
2016/06/02 Javascript
AngularJS实践之使用NgModelController进行数据绑定
2016/10/08 Javascript
[js高手之路]HTML标签解释成DOM节点的实现方法
2017/08/31 Javascript
用vue封装插件并发布到npm的方法步骤
2017/10/18 Javascript
Angularjs添加排序查询功能的实例代码
2017/10/24 Javascript
Vue-router 切换组件页面时进入进出动画方法
2018/09/01 Javascript
Javascript实现秒表倒计时功能
2018/11/17 Javascript
vue 使用element-ui中的Notification自定义按钮并实现关闭功能及如何处理多个通知
2019/08/17 Javascript
vue elementui 实现搜索栏公共组件封装的实例代码
2020/01/20 Javascript
使用PDB模式调试Python程序介绍
2015/04/05 Python
在Python中的Django框架中进行字符串翻译
2015/07/27 Python
和孩子一起学习python之变量命名规则
2018/05/27 Python
Python线程障碍对象Barrier原理详解
2019/12/02 Python
PyCharm上安装Package的实现(以pandas为例)
2020/09/18 Python
用CSS3打造HTML5的Logo(实现代码)
2016/06/16 HTML / CSS
使用html2canvas实现将html内容写入到canvas中生成图片
2020/01/03 HTML / CSS
全球领先美式家具品牌:Ashley爱室丽家居
2017/08/07 全球购物
办公室综合文员岗位职责范本
2014/02/13 职场文书
出国英文推荐信
2014/05/10 职场文书
检讨书格式
2015/05/07 职场文书
2015年国庆节广播稿
2015/08/19 职场文书
React列表栏及购物车组件使用详解
2021/06/28 Javascript
html form表单基础入门案例讲解
2021/07/21 HTML / CSS