窗口程序集名 | 保 留 | 保 留 | 备 注 |
窗口程序集_启动窗口 | | | |
变量名 | 类 型 | 数组 | 备 注 |
wsClient | 类_WSClient_HP | |
HP_初始化 () wsClient.
创建 ()wsClient.
置接收回调 (&接收回调函数
)
如果真 (wsClient.
连接 ("wss://echo.websocket.events", 443,
真) ==
假)
信息框 ("连接失败", 0, ,
)
|
接收回调函数 | | |
|
连接ID | 整数型 | | | |
数据类型 | 整数型 ' 0-文本 1-二进制 | | | | 数据指针 | 整数型 | | | | 数据长度 | 整数型 | | | |
如果 (数据类型 == 0
)
接收内容 =
指针到文本 (数据指针, 数据长度,
真)
编辑框1.
加入文本 ("收到消息:" + 接收内容 +
#换行符 )

字节集数据 =
指针到字节集 (数据指针, 数据长度
)
消息内容 = 编辑框输入.内容
如果真 (消息内容 ≠ ""
)
wsClient.
发送文本 (消息内容
) 
编辑框输入.内容 = ""

wsClient.
断开 ()HP_清理 ()
窗口程序集名 | 保 留 | 保 留 | 备 注 |
窗口程序集_启动窗口 | | | |
变量名 | 类 型 | 数组 | 备 注 |
套接字 | 整数型 | |
套接字 =
创建套接字 ()连接服务器 ()变量名 | 类 型 | 静态 | 数组 | 备 注 |
服务器地址 | 文本型 | | |
服务器端口 | 整数型 | | |
服务器地址 = "echo.websocket.events"
服务器端口 = 80
如果真 (连接套接字 (套接字, 服务器地址, 服务器端口
) ==
假)
信息框 ("连接失败", 0, ,
)
返回 ()
发送数据 (套接字,
生成握手请求 (服务器地址, 服务器端口
))
启动线程 (&接收数据线程, ,
)握手请求 = "GET / HTTP/1.1" +
#换行符 +
"Host: " + 主机 + ":" +
到文本 (端口
) +
#换行符 +
"Upgrade: websocket" +
#换行符 +
"Connection: Upgrade" +
#换行符 +
"Sec-WebSocket-Key: " +
取随机Base64密钥 () +
#换行符 +
"Sec-WebSocket-Version: 13" +
#换行符 +
#换行符 返回 (握手请求
)变量名 | 类 型 | 静态 | 数组 | 备 注 |
缓冲区 | 字节集 | | |
数据长度 | 整数型 | | |
判断循环首 (真)
数据长度 =
接收数据 (套接字, 缓冲区
)
如果真 (数据长度 ≤ 0
)
断开连接 ()
跳出循环 ()

解析WebSocket帧 (缓冲区
)
判断循环尾 ()变量名 | 类 型 | 静态 | 数组 | 备 注 |
opcode | 整数型 | | |
有效数据 | 字节集 | | |
opcode =
位与 (数据帧 , 0x0F
)
判断 (opcode == 1
) 
有效数据 =
解码WebSocket数据 (数据帧
)
编辑框1.
加入文本 ("收到消息:" +
到文本 (有效数据
) +
#换行符 )
判断 (opcode == 2
)

变量名 | 类 型 | 静态 | 数组 | 备 注 |
掩码键 | 字节集 | | |
数据长度 | 整数型 | | |
结果数据 | 字节集 | | |
数据长度 =
位与 (数据帧 , 0x7F
)
如果 (数据长度 == 126
)
数据长度 =
取字节集数据 (取字节集中间 (数据帧, 3, 2
),
#短整数型, ).
否则如果 (数据长度 == 127
)
数据长度 =
取字节集数据 (取字节集中间 (数据帧, 3, 8
),
#长整数型, )
掩码键 =
取字节集中间 (数据帧, 6, 4
) 结果数据 =
取字节集中间 (数据帧, 10, 数据长度
)
计次循环首 (取字节集长度 (结果数据
), i
)
结果数据
[i
] =
位异或 (结果数据
[i
], 掩码键
[ (i - 1
) % 4 + 1
])
计次循环尾 ()返回 (结果数据
)