使用mongoose来创建嵌入式websocket客户端和http客户端

使用mongoose原因

1 嵌入式非常合适
2 在简单需要的场合下,不需要其他文件,只需要两个文件包含
包含mongoose.h 和 mongoose.c 就可以使用了,比较方便,尤其在嵌入式里面,这两个文件就很有用了,不用其他依赖

httpclient

#include "httpclient.h"
#include "mongoose.h"/* RESTful server host and request URI *///static const char *s_url =
//"http://www.abc/data/1";static int s_exit_flag = 0;
static PageCallback gcallback = NULL;
static void ev_handler(struct mg_connection *nc, int ev, void *ev_data) {struct http_message *hm = (struct http_message *) ev_data;int connect_status;switch (ev) {case MG_EV_CONNECT:connect_status = *(int *)ev_data;if (connect_status != 0) {printf("Error connecting to server: %s\n", strerror(connect_status));s_exit_flag = 1;}break;case MG_EV_HTTP_REPLY://printf("Got reply:\n%.*s\n", (int)hm->body.len, hm->body.p);nc->flags |= MG_F_SEND_AND_CLOSE;s_exit_flag = 1;if (gcallback != NULL){gcallback(hm->body.p, (int)hm->body.len);}break;case MG_EV_CLOSE:if (s_exit_flag == 0) {printf("Server closed connection\n");s_exit_flag = 1;};break;default:break;}
}int httpclient(const char* url, PageCallback callback)
{struct mg_mgr mgr;struct mg_connection *nc;gcallback = callback;mg_mgr_init(&mgr, NULL);nc = mg_connect_http(&mgr, ev_handler, url, NULL, NULL);mg_set_protocol_http_websocket(nc);printf("Starting RESTful client against %s\n", url);while (s_exit_flag == 0) {mg_mgr_poll(&mgr, 1000);}mg_mgr_free(&mgr);return 0;
}

websocket 客户端

包含mongoose.h 和 mongoose.c 就可以使用了,比较方便,尤其在嵌入式里面,这两个文件就很有用了,不用

#include "mongoose.h"static int s_done = 0;
static int s_is_connected = 0;static void ev_handler(struct mg_connection *nc, int ev, void *ev_data) {(void)nc;switch (ev) {case MG_EV_CONNECT: {int status = *((int *)ev_data);if (status != 0) {printf("-- Connection error: %d\n", status);}break;}case MG_EV_WEBSOCKET_HANDSHAKE_DONE: {struct http_message *hm = (struct http_message *) ev_data;if (hm->resp_code == 101) {printf("-- Connected\n");s_is_connected = 1;}else {printf("-- Connection failed! HTTP code %d\n", hm->resp_code);/* Connection will be closed after this. */}break;}case MG_EV_POLL: {char msg[500];int n = 0;
#ifdef _WIN32 /* Windows console input is special. */INPUT_RECORD inp[100];HANDLE h = GetStdHandle(STD_INPUT_HANDLE);DWORD i, num;if (!PeekConsoleInput(h, inp, sizeof(inp) / sizeof(*inp), &num)) break;for (i = 0; i < num; i++) {if (inp[i].EventType == KEY_EVENT &&inp[i].Event.KeyEvent.wVirtualKeyCode == VK_RETURN) {break;}}if (i == num) break;if (!ReadConsole(h, msg, sizeof(msg), &num, NULL)) break;/* Un-unicode. This is totally not the right way to do it. */for (i = 0; i < num * 2; i += 2) msg[i / 2] = msg[i];n = (int)num;
#else /* For everybody else, we just read() stdin. */fd_set read_set, write_set, err_set;struct timeval timeout = { 0, 0 };FD_ZERO(&read_set);FD_ZERO(&write_set);FD_ZERO(&err_set);FD_SET(0 /* stdin */, &read_set);if (select(1, &read_set, &write_set, &err_set, &timeout) == 1) {n = read(0, msg, sizeof(msg));}
#endifif (n <= 0) break;while (msg[n - 1] == '\r' || msg[n - 1] == '\n') n--;mg_send_websocket_frame(nc, WEBSOCKET_OP_TEXT, msg, n);break;}case MG_EV_WEBSOCKET_FRAME: {struct websocket_message *wm = (struct websocket_message *) ev_data;printf("%.*s\n", (int)wm->size, wm->data);break;}case MG_EV_CLOSE: {if (s_is_connected) printf("-- Disconnected\n");s_done = 1;break;}}
}int main(int argc, char **argv) {struct mg_mgr mgr;struct mg_connection *nc;const char *chat_server_url = argc > 1 ? argv[1] : "ws://127.0.0.1:8000";mg_mgr_init(&mgr, NULL);nc = mg_connect_ws(&mgr, ev_handler, chat_server_url, "ws_chat", NULL);if (nc == NULL) {fprintf(stderr, "Invalid address\n");return 1;}while (!s_done) {mg_mgr_poll(&mgr, 100);}mg_mgr_free(&mgr);return 0;
}

使用mongoose来创建嵌入式websocket客户端和http客户端相关推荐

  1. WebSocket简单使用(二) - 客户端

    WebSocket简单使用(二) - 客户端 原文 http://www.oseye.net/user/kevin/blog/79 关于WebSocket我打算分如下几篇博文来探探路: WebSock ...

  2. Websocket(二)-客户端与服务器通信

    Websocket(二)-客户端与服务器通信 服务端 客户端测试 const WebSocket = require('ws'); const Server = WebSocket.Server; c ...

  3. 【RuoYi-Vue-Plus】扩展笔记 02 - 集成 WebSocket 发送消息到客户端(源码)

    文章目录 前言 关于需求实现的对比(轮询与 `WebSocket` ) 关于本篇文章 参考目录 代码实现参考 原理分析参考 集成流程 1.Maven 2.WebSocket 配置类 `WebSocke ...

  4. java getbasicremote_Vue+Java 通过websocket实现服务器与客户端双向通信操作

    1. vue代码 methods: { //在方法里调用 this.websocketsend()发送数据给服务器 onConfirm () { //需要传输的数据 let data = { code ...

  5. java 网页通讯_Vue+Java 通过websocket实现服务器与客户端双向通信操作

    1. vue代码 methods: { //在方法里调用 this.websocketsend()发送数据给服务器 onConfirm () { //需要传输的数据 let data = { code ...

  6. 基于springboot的websocket服务端和客户端demo(简单易上手)

    jdk 1.8 1.导入maven依赖 <!-- websocket服务端依赖 --> <dependency><groupId>org.springframewo ...

  7. windows平台下使用Github(2 创建代码仓库,安装Github客户端.)

    本文会分章节的来介绍如何在windows平台下使用GitHub 一.注册Github账号 查看 二.创建代码仓库,安装Github客户端.查看 三.Github上传和下载(1 客户端方式)查看 四.G ...

  8. 学习如何使用电脑客户端和ESP8266客户端来连接MQTT服务端以及订阅主题发送主题操作

    MQTT原理与应用 学习如何使用电脑客户端和ESP8266客户端来连接MQTT服务端 本文章学习借鉴于太极创客团队,以表感谢.官网[http://www.taichi-maker.com/] 文章目录 ...

  9. webservice java客户端_Java Webservice客户端(最佳方法)

    进行此JAVA的最佳方法是什么? 我个人不会使用Axis 2,即使仅用于客户端开发.这就是为什么我远离它的原因: 我不喜欢它的体系结构,讨厌它的适得其反的部署模型. 我发现这是低质量的项目. 我不喜欢 ...

最新文章

  1. 他入狱10年自学数学,如今凭借手稿发了篇论文,被同行评价“足以开辟数论新领域”...
  2. 【Ubuntu入门到精通系列讲解】常用其他命令(find ln tar apt)等速查
  3. socket网络编程ftp
  4. order by 子查询_SQL查询语法
  5. 上怎么图片和字环绕_计算机上的0和1是怎么变成我们屏幕上看到的图片、视频和声音的?...
  6. BZOJ44084299[Fjoi 2016]神秘数——主席树
  7. vue脚手架的自定义配置
  8. 计算机excel混合引用,excel绝对引用、混合引用和相对引用怎么用
  9. 动态链表头插法 和 动态尾插法
  10. win服务器系统设置休眠时间,win7系统电脑设置休眠时间的操作方法
  11. OSPF Vlink peer的配置
  12. 树莓派外接扩展板的的测试
  13. 论文阅读笔记:Masked Autoencoders Are Scalable Vision Learners
  14. 分布式秒杀电商-微服务架构图 上帝视角分析
  15. Week15 实验 B - ZJM 的本领 CodeForces - 499A
  16. python recv_python网络编程调用recv函数完整接收数据的三种方法
  17. 论文笔记——C2FNet:Context-aware Cross-level Fusion Network for Camouflaged Object Detection
  18. TE Edit Control控件介绍
  19. 1009 说反话 (20分)
  20. jaeger 链路追踪

热门文章

  1. 嵌入式 IOT 汽车 航空 AI 领域从IP到片上系统SOC信息检索网站 DR
  2. SQL Server 2022 DataSheet
  3. MFC开发IM-MFC任意位置实现窗口拖动
  4. tomcat热部署 更改类文件不需要重起
  5. 一些php+mysql的开源网上商城
  6. ASML 发布2021年第三季度财报
  7. 饿了么618数据:休闲娱乐业增超200% 医美消费者翻倍
  8. 疑似vivo X60t Pro在工信部入网:搭载天玑1200 主打线下渠道
  9. 退出智能手机业务后 LG电子仍将提供最多三年操作系统升级
  10. 雷军变身IPO收割机:坐拥4家上市公司,今年至少收获8个IPO!