使用mongoose来创建嵌入式websocket客户端和http客户端
使用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客户端相关推荐
- WebSocket简单使用(二) - 客户端
WebSocket简单使用(二) - 客户端 原文 http://www.oseye.net/user/kevin/blog/79 关于WebSocket我打算分如下几篇博文来探探路: WebSock ...
- Websocket(二)-客户端与服务器通信
Websocket(二)-客户端与服务器通信 服务端 客户端测试 const WebSocket = require('ws'); const Server = WebSocket.Server; c ...
- 【RuoYi-Vue-Plus】扩展笔记 02 - 集成 WebSocket 发送消息到客户端(源码)
文章目录 前言 关于需求实现的对比(轮询与 `WebSocket` ) 关于本篇文章 参考目录 代码实现参考 原理分析参考 集成流程 1.Maven 2.WebSocket 配置类 `WebSocke ...
- java getbasicremote_Vue+Java 通过websocket实现服务器与客户端双向通信操作
1. vue代码 methods: { //在方法里调用 this.websocketsend()发送数据给服务器 onConfirm () { //需要传输的数据 let data = { code ...
- java 网页通讯_Vue+Java 通过websocket实现服务器与客户端双向通信操作
1. vue代码 methods: { //在方法里调用 this.websocketsend()发送数据给服务器 onConfirm () { //需要传输的数据 let data = { code ...
- 基于springboot的websocket服务端和客户端demo(简单易上手)
jdk 1.8 1.导入maven依赖 <!-- websocket服务端依赖 --> <dependency><groupId>org.springframewo ...
- windows平台下使用Github(2 创建代码仓库,安装Github客户端.)
本文会分章节的来介绍如何在windows平台下使用GitHub 一.注册Github账号 查看 二.创建代码仓库,安装Github客户端.查看 三.Github上传和下载(1 客户端方式)查看 四.G ...
- 学习如何使用电脑客户端和ESP8266客户端来连接MQTT服务端以及订阅主题发送主题操作
MQTT原理与应用 学习如何使用电脑客户端和ESP8266客户端来连接MQTT服务端 本文章学习借鉴于太极创客团队,以表感谢.官网[http://www.taichi-maker.com/] 文章目录 ...
- webservice java客户端_Java Webservice客户端(最佳方法)
进行此JAVA的最佳方法是什么? 我个人不会使用Axis 2,即使仅用于客户端开发.这就是为什么我远离它的原因: 我不喜欢它的体系结构,讨厌它的适得其反的部署模型. 我发现这是低质量的项目. 我不喜欢 ...
最新文章
- 他入狱10年自学数学,如今凭借手稿发了篇论文,被同行评价“足以开辟数论新领域”...
- 【Ubuntu入门到精通系列讲解】常用其他命令(find ln tar apt)等速查
- socket网络编程ftp
- order by 子查询_SQL查询语法
- 上怎么图片和字环绕_计算机上的0和1是怎么变成我们屏幕上看到的图片、视频和声音的?...
- BZOJ44084299[Fjoi 2016]神秘数——主席树
- vue脚手架的自定义配置
- 计算机excel混合引用,excel绝对引用、混合引用和相对引用怎么用
- 动态链表头插法 和 动态尾插法
- win服务器系统设置休眠时间,win7系统电脑设置休眠时间的操作方法
- OSPF Vlink peer的配置
- 树莓派外接扩展板的的测试
- 论文阅读笔记:Masked Autoencoders Are Scalable Vision Learners
- 分布式秒杀电商-微服务架构图 上帝视角分析
- Week15 实验 B - ZJM 的本领 CodeForces - 499A
- python recv_python网络编程调用recv函数完整接收数据的三种方法
- 论文笔记——C2FNet:Context-aware Cross-level Fusion Network for Camouflaged Object Detection
- TE Edit Control控件介绍
- 1009 说反话 (20分)
- jaeger 链路追踪