开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 335|回复: 7
收起左侧

[易语言] Websocket消息接收

[复制链接]
结帖率:33% (1/3)
发表于 2025-4-5 21:23:37 | 显示全部楼层 |阅读模式   福建省福州市
36精币
易语言怎么实现[backcolor=rgba(255, 255, 255, 0.5)]Websocket消息实时接收 有没有大佬分享个例子


回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值无答案申请取消悬赏投诉有答案未采纳为最佳

签到天数: 13 天

发表于 2025-4-5 21:27:37 | 显示全部楼层   江苏省徐州市
.版本 2
.支持库 spec

.子程序 __启动窗口_创建完毕
.局部变量 http回调函数, 整数型
.局部变量 WebSocket回调函数, 整数型
.局部变量 Tcp回调函数, 整数型
.局部变量 错误信息, 文本型

' Sunny中间件  在模块中已是全局变量,直接使用即可
Sunny中间件.绑定端口 (2022)

http回调函数 = 0
WebSocket回调函数 = 到整数 (&__示例__WebSocket回调函数)
Tcp回调函数 = 0

Sunny中间件.绑定回调地址 (http回调函数, Tcp回调函数, WebSocket回调函数)
' Sunny中间件.设置IE代理 ()  ' 设置IE代理
' Sunny中间件.关闭IE代理 ()'取消IE代理

.如果 (Sunny中间件.启动 ())
    .如果真 (Sunny中间件.安装证书 (错误信息) = 假)
        信息框 (“自动安装证书到系统失败,请手动安装证书!” + #换行符 + #换行符 + 错误信息, 0, “证书安装失败”, )
    .如果真结束
    ' 安装证书请阅读:http://esunny.vip/ 中的 [Sunny网络中间件-示例文档]->[(教程)安装证书]
    信息框 (“启动成功”, 0, , )

.否则
    信息框 (Sunny中间件.取错误 (), #错误图标, “启动失败”, )
.如果结束


.子程序 __示例__WebSocket回调函数, , 公开
.参数 SunnyContext, 整数型, , Sunny中间件可创建多个 由这个参数判断是哪个Sunny回调过来的
.参数 请求唯一ID, 整数型
.参数 MessageId, 整数型
.参数 消息类型, 整数型, , #Sunny_消息类型_
.参数 Method, 文本型
.参数 Url, 文本型
.参数 pid, 整数型, , 进程PID 若等于0 表示通过代理远程请求 无进程PID
.参数 WsMsgType, 整数型, , ws/wss 发送或接收的消息类型 请使用[ #Sunny_WsMessage_]

' ws 测试地址  http:// coolaf.com/tool/chattest
' wss 测试地址  https:// www .idcd.com/tool/socket
' ===========================================
' 相关命令
' Sunny函数.ws_发送数据 (发送方向,请求唯一ID, WsMsgType, 到字节集 (“123456”)) ' 主动发送消息 可在任意位置调用
' Sunny函数.ws_断开指定连接 (请求唯一ID) ' 主动发送消息 可在任意位置调用

.判断开始 (消息类型 = #Sunny_Websocket_消息类型_连接成功)

    调试输出 (“Websocket 建立连接”, Url)

.判断 (消息类型 = #Sunny_Websocket_消息类型_发送数据)

    调试输出 (“Websocket 发送数据”, Url)
    ' 相关命令
    ' Sunny函数.ws_取Body长度 (MessageId) ' 取要发送数据的长度
    ' Sunny函数.ws_取Body (MessageId)  ' 取出要发送的数据
    ' Sunny函数.ws_修改Body (MessageId, {  }) '将要发送的数据修改为 空

.判断 (消息类型 = #Sunny_Websocket_消息类型_收到数据)

    调试输出 (“Websocket 收到数据”, Url)
    ' 相关命令
    ' Sunny函数.ws_取Body长度 (MessageId) ' 取要发送数据的长度
    ' Sunny函数.ws_取Body (MessageId)  ' 取出要发送的数据
    ' Sunny函数.ws_修改Body (MessageId, {  }) '将要发送的数据修改为 空

.判断 (消息类型 = #Sunny_Websocket_消息类型_断开连接)

    调试输出 (“Websocket 断开连接”, Url)
.默认

.判断结束
返回 ()
回复

使用道具 举报

签到天数: 13 天

发表于 2025-4-5 21:29:05 | 显示全部楼层   江苏省徐州市
忆思梦 发表于 2025-4-5 21:27
.版本 2
.支持库 spec

SunnyNet网络中间件【更新】2025-01-27
https://bbs.125.la/forum.php?mod=viewthread&tid=14847096
(出处: 精易论坛)
用秦天大佬的sunny模块
回复

使用道具 举报

结帖率:33% (1/3)

签到天数: 2 天

 楼主| 发表于 2025-4-5 21:33:58 | 显示全部楼层   福建省福州市
忆思梦 发表于 2025-4-5 21:29
SunnyNet网络中间件【更新】2025-01-27
https://bbs.125.la/forum.php?mod=viewthread&tid=14847096
(出 ...

ws链接ws://localhost:3001/get_msg?access_token=
监听该链接到编辑框中 怎么操作知道吗大佬方便给个示例吗
回复

使用道具 举报

结帖率:33% (1/3)

签到天数: 2 天

 楼主| 发表于 2025-4-5 21:42:09 | 显示全部楼层   福建省福州市
如何监听ws://localhost:3001/get_msg?access_token= 内容返回 编辑框
回复

使用道具 举报

签到天数: 13 天

发表于 2025-4-5 22:07:36 | 显示全部楼层   江苏省徐州市
大概写了一下,模块和dll的话自行下载就行了
SunnyNet网络中间件【更新】2025-01-27
https://bbs.125.la/forum.php?mod=viewthread&tid=14847096

demo.e

56.46 KB, 下载次数: 6

回复

使用道具 举报

结帖率:97% (86/89)

签到天数: 16 天

发表于 2025-4-5 22:58:21 | 显示全部楼层   河北省沧州市
E2EE支持库也可以
回复

使用道具 举报

结帖率:50% (2/4)

签到天数: 13 天

发表于 2025-4-6 08:35:52 | 显示全部楼层   浙江省杭州市
wsocket
  
窗口程序集名保 留  保 留备 注
窗口程序集_启动窗口   
变量名类 型数组备 注
wsClient类_WSClient_HP  

子程序名返回值类型公开备 注
__启动窗口_创建完毕  
' 初始化HP-Socket环境
HP_初始化 ()
' 创建WebSocket客户Duan
wsClient.创建 ()
wsClient.置接收回调 (&接收回调函数)
' 连接服务器
如果真 (wsClient.连接 ("wss://echo.websocket.events", 443, ) == )
信息框 ("连接失败", 0, , )

子程序名返回值类型公开备 注
接收回调函数  
参数名类 型参考可空数组备 注
连接ID整数型
数据类型整数型  ' 0-文本 1-二进制
数据指针整数型
数据长度整数型
变量名类 型静态数组备 注
接收内容文本型 
' 处理文本消息
如果 (数据类型 == 0)
接收内容 = 指针到文本 (数据指针, 数据长度, )
编辑框1.加入文本 ("收到消息:" + 接收内容 + #换行符 )
' 处理二进制数据(如图片)
字节集数据 = 指针到字节集 (数据指针, 数据长度)

子程序名返回值类型公开备 注
_按钮发送_被单击  
变量名类 型静态数组备 注
消息内容文本型 
消息内容 = 编辑框输入.内容
如果真 (消息内容 ≠ "")
wsClient.发送文本 (消息内容)  ' 发送文本数据
编辑框输入.内容 = ""

子程序名返回值类型公开备 注
__启动窗口_将被销毁  
wsClient.断开 ()
HP_清理 ()

系统api(不推荐)
  
窗口程序集名保 留  保 留备 注
窗口程序集_启动窗口   
变量名类 型数组备 注
套接字整数型  

子程序名返回值类型公开备 注
__启动窗口_创建完毕  
套接字 = 创建套接字 ()
连接服务器 ()
子程序名返回值类型公开备 注
连接服务器  
变量名类 型静态数组备 注
服务器地址文本型 
服务器端口整数型 
服务器地址 = "echo.websocket.events"
服务器端口 = 80
如果真 (连接套接字 (套接字, 服务器地址, 服务器端口) == )
信息框 ("连接失败", 0, , )
返回 ()

' 发送WebSocket握手请求
发送数据 (套接字, 生成握手请求 (服务器地址, 服务器端口))
' 启动接收线程
启动线程 (&接收数据线程, , )
子程序名返回值类型公开备 注
生成握手请求  
参数名类 型参考可空数组备 注
主机文本型
端口整数型
变量名类 型静态数组备 注
握手请求文本型 
握手请求 = "GET / HTTP/1.1" + #换行符 +
"Host: " + 主机 + ":" + 到文本 (端口) + #换行符 +
"Upgrade: websocket" + #换行符 +
"Connection: Upgrade" + #换行符 +
"Sec-WebSocket-Key: " + 取随机Base64密钥 () + #换行符 +
"Sec-WebSocket-Version: 13" + #换行符 +
#换行符
返回 (握手请求)
子程序名返回值类型公开备 注
接收数据线程  
变量名类 型静态数组备 注
缓冲区字节集 
数据长度整数型 
判断循环首 ()
数据长度 = 接收数据 (套接字, 缓冲区)
如果真 (数据长度 ≤ 0)
断开连接 ()
跳出循环 ()

' 解析WebSocket数据帧
解析WebSocket帧 (缓冲区)
判断循环尾 ()
子程序名返回值类型公开备 注
解析WebSocket帧  
参数名类 型参考可空数组备 注
数据帧字节集
变量名类 型静态数组备 注
opcode整数型 
有效数据字节集 
' 解析第一个字节
opcode = 位与 (数据帧 , 0x0F)
判断 (opcode == 1)  ' 文本帧
有效数据 = 解码WebSocket数据 (数据帧)
编辑框1.加入文本 ("收到消息:" + 到文本 (有效数据) + #换行符 )
判断 (opcode == 2)  ' 二进制帧
' 处理二进制数据

子程序名返回值类型公开备 注
解码WebSocket数据  
参数名类 型参考可空数组备 注
数据帧字节集
变量名类 型静态数组备 注
掩码键字节集 
数据长度整数型 
结果数据字节集 
' 解析数据长度
数据长度 = 位与 (数据帧 , 0x7F)
如果 (数据长度 == 126)
数据长度 = 取字节集数据 (取字节集中间 (数据帧, 3, 2), #短整数型, )
.否则如果 (数据长度 == 127)
数据长度 = 取字节集数据 (取字节集中间 (数据帧, 3, 8), #长整数型, )

' 获取掩码键
掩码键 = 取字节集中间 (数据帧, 6, 4)
' 解码数据
结果数据 = 取字节集中间 (数据帧, 10, 数据长度)
计次循环首 (取字节集长度 (结果数据), i)
结果数据 [i] = 位异或 (结果数据 [i], 掩码键 [ (i - 1) % 4 + 1])
计次循环尾 ()
返回 (结果数据)

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表