既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
lws_callback_on_writable 是 libwebsockets 库中的一个函数,它的含义是将一个 websocket 连接的 writable 回调函数加入到事件循环中。当该连接的网络缓冲区变为空闲状态时,就会触发这个回调函数。这个函数通常用于在 websocket 连接中发送数据。调用该函数可以确保在网络缓冲区可写时立即发送数据,从而提高网络传输效率。
(6)常用的结构体
struct lws // websocket连接句柄
struct lws_context // websocket处理器
struct lws_context_creation_info // context参数
struct lws_protocols // 协议层传输句柄
void* m_pUser; // 返回回调的对象
struct lws_client_connect_info // 连接参数
2、服务器
以下是使用libwebsockets编写WebSocket服务器的简单步骤:
(1)安装libwebsockets库:您可以从官方网站(https://libwebsockets.org/)下载最新版本的库。
可以通过以下命令安装libwebsockets库:
sudo apt-get install libwebsockets-dev
(2)创建WebSocket服务器
基本的步骤:
a. 创建一个libwebsocket_context对象,该对象将管理所有客户端连接。
b. 设置服务器的协议和端口号。
c. 创建一个回调函数,该函数将处理来自客户端的消息。
d. 启动服务器并等待客户端连接。
处理客户端连接:当客户端连接到服务器时,您需要编写代码来处理连接。这包括验证客户端身份,处理消息和关闭连接。
发送消息:您可以使用libwebsocket库中的函数向客户端发送消息。
下面是一个简单的WebSocket服务器的代码:
libwebsocket开源库中,lws_service回调函数的参数含义如下:
wsi:websocket实例,表示当前正在处理的websocket连接。
reason:关闭连接的原因代码。如果连接未关闭,此参数为0。
user:用户数据,可以使用lws_callback_on_writable函数设置。
in:接收到的数据缓冲区。
len:接收到的数据长度。
flags:标志位,用于指示连接状态等信息。
out:发送数据缓冲区。
out_len:发送数据长度。
reserved:保留参数,暂时没有使用。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <libwebsockets.h>
static int callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len)
{
return 0;
}
static int callback_websocket(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len)
{
switch (reason) {
case LWS_CALLBACK_ESTABLISHED:
printf("WebSocket connection established\n");
break;
case LWS_CALLBACK_RECEIVE:
printf("Received data: %s\n", (char *)in);
break;
case LWS_CALLBACK_CLOSED:
printf("WebSocket connection closed\n");
break;
default:
break;
}
return 0;
}
//注册协议,一种协议,对应一套处理方案(类似驱动中的设备树)
static struct lws_protocols protocols[] = {
{
"http",
callback_http,
0,
0,
},
{
"websocket",
callback_websocket,
0,
0,
},
{ NULL, NULL, 0, 0 } /* end of list */
};
int main(int argc, char **argv)
{
struct lws_context_creation_info info;
struct lws_context *context;
int port = 9000;
memset(&info, 0, sizeof(info));
info.port = port;
info.protocols = protocols;
context = lws_create_context(&info);
if (!context) {
printf("Error creating WebSocket context\n");
return 1;
}
printf("WebSocket server started on port %d\n", port);
while (1) {
lws_service(context, 50);
}
lws_context_destroy(context);
return 0;
}
(3)编译和运行服务器
可以使用以下命令编译服务器:
gcc -o server server.c -lwebsockets
然后运行服务器:
./server
现在WebSocket服务器已经启动了,可以使用浏览器或其他WebSocket客户端连接到它。
以上是使用libwebsockets库创建WebSocket服务器的简单教程,希望对你有所帮助。
3、客户端
(1)基本步骤:
A. 在代码中引入libwebsocket库的头文件:
#include <libwebsockets.h>
B. 创建一个lws_context对象,用于管理WebSocket连接:
struct lws_context* context;
C. 定义连接参数结构体,并设置连接信息:
struct lws_client_connect_via_info connect_info = {
.context = context,
.address = "192.168.12.226",
.port = 8081,
.path = "/",
.host = "192.168.12.226",
.origin = "http://192.168.12.226",
.protocol = NULL,
.user = NULL,
.password = NULL
};
D. 使用lws_client_connect_via_info()函数连接到WebSocket服务器:
lws* ws_client = lws_client_connect_via_info(&connect_info);
E. 在连接成功后,可以使用lws_write()函数向服务器发送消息:
char *message = "Hello, WebSocket Server!";
lws_write(ws_client, (unsigned char *)message, strlen(message), LWS_WRITE_TEXT);
F. 最后,在程序结束时,使用lws_context_destroy()函数释放资源:
lws_context_destroy(context);
(2)以下是使用libwebsockets库创建一个基本的WebSocket客户端的示例代码:
lws_client_connect_via_info 是一个函数,用于通过给定的连接信息连接到 WebSocket 服务器。它接受一个指向连接信息结构体的指针作为参数,并返回一个指向连接句柄的指针。连接信息结构体包含有关连接的所有必要信息,例如服务器的地址、端口号、协议等。使用该函数可以方便地连接到 WebSocket 服务器并开始进行通信。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
[外链图片转存中…(img-A9VKnpam-1715820600014)]
[外链图片转存中…(img-V2RqzISm-1715820600014)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新