php socket通信简单实现


Posted in PHP onNovember 18, 2016

socket通信的原理在这里就不说了,它的用途还是比较广泛的,我们可以使用socket来做一个API接口出来,也可以使用socket来实现两个程序之间的通信,我们来研究一下在php里面如何实现socket通信。

由于socket服务端的代码要监听端口,等待接收请求,所以php在做socket服务的时候需要将php文件运行在CMD里面。

如果要使php文件可以在CMD里面运行,则需要进行如下设置:

1.添加环境变量,名字为PHP_HOME,值为php文件安装目录下的.exe文件地址,如D:\wamp\bin\php\php5.5.12\php.exe

php socket通信简单实现

2.修改系统变量path的值

在path的值里面添加php安装的目录:如D:\wamp\bin\php\php5.5.12;

php socket通信简单实现

好了,到这里我们就配置好了环境变量,下一步我们打开CMD,想要在里面运行php文件,比如aaa.php文件,则我们写上这一句话:

php d:\wamp\www\aaa.php

然后按下回车键,好了,我们的php文件在cmd里面运行了,输出了一句:hello

php socket通信简单实现

这样的话php文件能够成功在cmd里面运行,接下来我们来看一下php怎么实现socket通信。

1.php制作的socket服务端

主要功能是设置socket通信的IP地址及端口号,监听端口,有客户端连接的话,接收连接请求接收数据,处理并且返回数据。

代码如下:

//确保在连接客户端时不会超时
set_time_limit(0);
//设置IP和端口号
$address = "127.0.0.1";
$port = 2048; //调试的时候,可以多换端口来测试程序!
/**
 * 创建一个SOCKET 
 * AF_INET=是ipv4 如果用ipv6,则参数为 AF_INET6
 * SOCK_STREAM为socket的tcp类型,如果是UDP则使用SOCK_DGRAM
*/
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die("socket_create() 失败的原因是:" . socket_strerror(socket_last_error()) . "/n");
//阻塞模式
socket_set_block($sock) or die("socket_set_block() 失败的原因是:" . socket_strerror(socket_last_error()) . "/n");
//绑定到socket端口
$result = socket_bind($sock, $address, $port) or die("socket_bind() 失败的原因是:" . socket_strerror(socket_last_error()) . "/n");
//开始监听
$result = socket_listen($sock, 4) or die("socket_listen() 失败的原因是:" . socket_strerror(socket_last_error()) . "/n");
echo "OK\nBinding the socket on $address:$port ... ";
echo "OK\nNow ready to accept connections.\nListening on the socket ... \n";
do { // never stop the daemon
 //它接收连接请求并调用一个子连接Socket来处理客户端和服务器间的信息
 $msgsock = socket_accept($sock) or die("socket_accept() failed: reason: " . socket_strerror(socket_last_error()) . "/n");
 
 //读取客户端数据
 echo "Read client data \n";
 //socket_read函数会一直读取客户端数据,直到遇见\n,\t或者\0字符.PHP脚本把这写字符看做是输入的结束符.
 $buf = socket_read($msgsock, 8192);
 echo "Received msg: $buf \n";
 
 //数据传送 向客户端写入返回结果
 $msg = "welcome \n";
 socket_write($msgsock, $msg, strlen($msg)) or die("socket_write() failed: reason: " . socket_strerror(socket_last_error()) ."/n");
 //一旦输出被返回到客户端,父/子socket都应通过socket_close($msgsock)函数来终止
 socket_close($msgsock);
} while (true);
socket_close($sock);

2.调取socket服务的客户端文件

客户端依然是要设置好要访问服务器的IP地址及端口号(即上一步骤中的IP及端口),完了创建一个socket连接,发送数据到服务器,接收返回数据。

set_time_limit(0);

$host = "127.0.0.1";
$port = 2048;
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)or die("Could not create  socket\n"); // 创建一个Socket
 
$connection = socket_connect($socket, $host, $port) or die("Could not connet server\n");  // 连接
socket_write($socket, "hello socket") or die("Write failed\n"); // 数据传送 向服务器发送消息
while ($buff = @socket_read($socket, 1024, PHP_NORMAL_READ)) {
  echo("Response was:" . $buff . "\n");
}
socket_close($socket);

3.在cmd里面运行服务端代码

php socket通信简单实现

运行成功,已经在监听端口了。。。

4.在网页里面运行我们的客户端网页,来向服务器交互数据

运行起来,浏览器显示:

php socket通信简单实现

cmd里面的服务端显示:

php socket通信简单实现

这是一个简单的socket通信的测试,至于socket接收到什么数据,怎么处理数据,返回什么类型的数据,还需要使用php来做逻辑了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
实现 win2003 下 mysql 数据库每天自动备份
Dec 06 PHP
php设计模式  Command(命令模式)
Jun 17 PHP
php安全配置 如何配置使其更安全
Dec 16 PHP
PHP和javascript常用正则表达式及用法实例
Jul 01 PHP
php版微信数据统计接口用法示例
Oct 12 PHP
php unicode编码和字符串互转的方法
Aug 12 PHP
php使用parse_str实现查询字符串解析到变量中的方法
Feb 17 PHP
PHP中Notice错误常见解决方法
Apr 28 PHP
详解thinkphp中的volist标签
Jan 15 PHP
php实现表单提交上传文件功能
May 28 PHP
PHP实现打包zip并下载功能
Jun 12 PHP
浅谈Laravel中的三种中间件的作用
Oct 13 PHP
php微信开发之自定义菜单实现
Nov 18 #PHP
php微信开发之百度天气预报
Nov 18 #PHP
PHP-FPM运行状态的实时查看及监控详解
Nov 18 #PHP
PHP+iframe图片上传实现即时刷新效果
Nov 18 #PHP
PHP批量获取网页中所有固定种子链接的方法
Nov 18 #PHP
PHP实现二维数组按某列进行排序的方法
Nov 18 #PHP
PHP二维数组去重实例分析
Nov 18 #PHP
You might like
一个捕获函数输出的函数
2007/02/14 PHP
PHP的Yii框架中YiiBase入口类的扩展写法示例
2016/03/17 PHP
在线游戏大家来找茬II
2006/09/30 Javascript
6个DIV 135或246间隔一秒轮番显示效果
2010/07/24 Javascript
解析页面加载与js函数的执行 onload or ready
2013/12/12 Javascript
jQuery统计上传文件大小的方法
2015/01/24 Javascript
JS基于面向对象实现的放烟花效果
2015/05/07 Javascript
jQuery实现文本框邮箱输入自动补全效果
2015/11/17 Javascript
谈谈Jquery ajax中success和complete有哪些不同点
2015/11/20 Javascript
JS组件Bootstrap实现弹出框和提示框效果代码
2015/12/08 Javascript
AngularJS实现标签页的两种方式
2016/09/05 Javascript
JavaScript给每一个li节点绑定点击事件的实现方法
2016/12/01 Javascript
微信小程序商品到详情的实现
2017/06/27 Javascript
vue.js 微信支付前端代码分享
2018/02/10 Javascript
JS实现换肤功能的方法实例详解
2019/01/30 Javascript
Vue 中如何正确引入第三方模块的方法步骤
2019/05/05 Javascript
es5 类与es6中class的区别小结
2020/11/09 Javascript
javascript实现时钟动画
2020/12/03 Javascript
[47:03]完美世界DOTA2联赛PWL S3 Galaxy Racer vs Phoenix 第二场 12.10
2020/12/13 DOTA
Python自动连接ssh的方法
2015/03/07 Python
基于Django模板中的数字自增(详解)
2017/09/05 Python
Python 3.8 新功能大揭秘【新手必学】
2020/02/05 Python
Django多数据库配置及逆向生成model教程
2020/03/28 Python
解决更改AUTH_USER_MODEL后出现的问题
2020/05/14 Python
python爬虫使用requests发送post请求示例详解
2020/08/05 Python
CSS3制作日历实现代码
2012/01/21 HTML / CSS
利用css3径向渐变做一张优惠券的示例
2018/03/22 HTML / CSS
可持续木材、生态和铝制太阳镜:Proof Eyewear
2019/07/24 全球购物
意大利在线药房:Saninforma
2021/02/11 全球购物
会计毕业生自荐信
2013/11/21 职场文书
奥巴马当选演讲稿
2014/09/10 职场文书
介绍长城的导游词
2015/01/30 职场文书
原料仓管员岗位职责
2015/04/01 职场文书
2015年后勤工作总结范文
2015/04/08 职场文书
机关单位2016年法制宣传日活动总结
2016/04/01 职场文书
MySQL中几种插入和批量语句实例详解
2021/09/14 MySQL