php使用socket简单实现通信功能
作者:小信啊啊 发布时间:2023-05-31 13:01:23
标签:php,socket,通信
WebSocket的作用
WebSock其实在平常使用,我们是时常见到的,用于实时通讯,例如我们常用的实时聊天、服务端向客户端消息推送、也可以实现踢用户下线功能。实时弹幕功能等等。
什么是握手
为了创建Websocket连接,需要通过浏览器发出请求,之后服务器进行回应,这个过程通常称为“握手”(handshaking)。
这是比较正式的理解,在接下来使用方式中会在介绍到握手的实际含义。
背景介绍
目标:我希望通过套接字的TCP传输来搭建一个服务器,这个服务器的作用是:接受多个客户端的连接并完成他们的相互通信。比如客户端A,客户端B同时连接到服务器S,客户端A向服务器S发送消息,服务器S会将A的消息转发给B,同理,B的消息也可以通过S被转发到A。这样就实现了客户端A和客户端B之间的相互通信。
本次我们只实现客户端与服务器之间连接并通信,暂时没有写服务器的转发功能。
IP和PORT
服务端需要有一个IP,TCP通信时,还需要提供一个端口号。
客服端需要有一个IP,TCP通信时,也需要提供一个端口号。
服务端就是负责接收客户端的信息
客户端代码
$PORT = 12345; //与server端口匹配
//创建socket/参数1:代表IPV4/参数2:流传输/参数3:TCP/
$client = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
//向指定地址/端口发出连接请求,连接结果返回到resule/127.0.0.1指本地IP
$result = socket_connect($client, "127.0.0.1", $PORT);
//这里我们简单的对连接结果进行响应/为了Debug方便
if($result == false){
echo "ERROR CONNECT\n";
die();
} else {
echo "CONNECTED\n";
}
//建立将要发送的消息
$data = "linrux Hello World\n";
//将消息发送出去
socket_write($client, $data);
//关闭socket
socket_close($client);
服务端代码
//进入死循环,一直接收客户端发送信息
while(true){
//创建socket/参数解释同客服端
$server = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
//绑定端口和IP/0.0.0.0表示允许任意地址发起连接/12345表示允许12345端口号进行连接
socket_bind($server, "0.0.0.0", 12345);
//进入监听
socket_listen($server);
//接收请求并建立连接
$connection = socket_accept($server);
//接收数据
$data = socket_read($connection, 1024);
echo $data;
}
//关闭socket
#socket_close($server);
客户端发送信息
服务端接收消息
来源:https://blog.csdn.net/csdn876280441/article/details/128953468
0
投稿
猜你喜欢
- XML、 XLink、 Namespace、 DTD、 Schema、 CSS、 XHTML...假如你从未接触XML, 或许你会感觉不知从
- mysql设置字段长度1.关于char和varcharchar是定长字符,varchar是变长字符。在mysql4.0版本之前,char和v
- 1. 调试pythonipdb是用来python中用以交互式debug的模块,可以直接利用pip安装;其功能类似于pycharm中pytho
- 使用filter函数,实现一个条件判断函数即可。比如想过滤掉字符串数组中某个敏感词,示范代码如下:#filter out some unwa
- Zabbix 是一款强大的开源网管监控工具,该工具的客户端与服务端是分开的,我们可以直接使用自带的zabbix_get命令来实现拉取客户端上
- 1.循环删除 #这个是我选中其中的一个分支进行右键清空操作时进行的处理for i in range(self.tree.currentIte
- 操作实现函数: 代码如下:Function AddWater(n) Set Photo = 
- 需要实现的效果是: 固定放大两倍,鼠标进入到左侧图片区域的时候,遮罩层显示,离开时,遮罩层隐藏。 css中的cursorhttps
- SymPy是符号数学的Python库。它的目标是成为一个全功能的计算机代数系统,同时保持代码简洁、易于理解和扩展#coding:utf-8&
- 这篇文章主要介绍了python多进程间通信代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可
- Python中字符串前面我们经常看到加r(R)或u/(U)的前缀,而这两个符号是什么意思呢?1.r(R)r意为raw,表示不包含转义字符的原
- package dao;import org.hibernate.HibernateException;import org.hiberna
- 一、安装配置PHP1、下载Php的版本zip包之后,解压缩到指定目录。下载地址:http://www.php.net/downl
- 最近发现周围的很多小伙伴们都不太乐意使用pandas,转而投向其他的数据操作库,身为一个数据工作者,基本上是张口pandas,闭口panda
- 例如我要测试一个创建网络的接口,需要先拿token值,而获取token的接口请求成功后,将token存在了响应头headers,postma
- 在vue中使用ant-design-vue组件官方地址:Ant Design Vue1. 安装首先使用vue-cli创建项目,然后进入项目,
- 执行文件和目标导入模块在同一目录直接import比如我要在ma_main.py中导入env包中的make_env.py文件, 从而读取其中的
- 如果仅仅是定义表格的边框为1(border="1")和边框颜色值(如borderC
- <html>位于网页的顶端它没有父辈,称之为根节点1.元素节点(element node)可以说,整个DOM模型都是由元素节点(
- 某个线程要共享数据时,先将其锁定,此时资源的状态为“锁定”,其他线程不能更改;直到该线程释放资源,将资源的状态变成“非锁定”,其他的线程才能