当前位置: 首页 > wzjs >正文

每天看七个广告赚40元的app北京优化健康宝

每天看七个广告赚40元的app,北京优化健康宝,wordpress 临时域名,网站重新备案 需要关闭网站么最近在使用libwebsocket,感觉它搭建Http与websocket服务器比较简单,不像poco库那么庞大,但当我使用它建立websocket服务器后,发现websocket客户端连接一直没有连接成功,不知道什么原因,经过一天的调试&…

最近在使用libwebsocket,感觉它搭建Http与websocket服务器比较简单,不像poco库那么庞大,但当我使用它建立websocket服务器后,发现websocket客户端连接一直没有连接成功,不知道什么原因,经过一天的调试,终于搞通,因此记录一下被坑的一天,以下是调通的完整DEMO:

#include <libwebsockets.h>
#include <stdio.h>
#include <string.h>/* 定义支持的协议 */
enum protocols {PROTOCOL_HTTP = 0,PROTOCOL_CHAT,PROTOCOL_JSON,PROTOCOL_COUNT
};/* WebSocket 协议回调函数 */
static int callback_chat(struct lws* wsi, enum lws_callback_reasons reason, void* user, void* in, size_t len) {printf("callback_chat %d\n", reason);switch (reason) {case LWS_CALLBACK_ESTABLISHED:printf("[Chat] 客户端连接成功 (协议: %s)\n", lws_get_protocol(wsi)->name);break;case LWS_CALLBACK_RECEIVE:printf("[Chat] 收到消息: %.*s\n", (int)len, (char*)in);// 回声lws_write(wsi, (unsigned char*) in, len, LWS_WRITE_TEXT);break;default:break;}return 0;
}static int callback_json(struct lws* wsi, enum lws_callback_reasons reason, void* user, void* in, size_t len) {printf("callback_json %d\n", reason);switch (reason) {case LWS_CALLBACK_ESTABLISHED:printf("[JSON] 客户端连接成功 (协议: %s)\n", lws_get_protocol(wsi)->name);break;case LWS_CALLBACK_RECEIVE:printf("[JSON] 收到消息: %.*s\n", (int)len, (char*)in);// 返回 JSON 响应const char* response = "{\"status\":\"ok\",\"data\":\"received\"}";lws_write(wsi, (unsigned char*)response, strlen(response), LWS_WRITE_TEXT);break;}return 0;
}/* HTTP 回调函数(处理非 WebSocket 请求) */
static int callback_http(struct lws* wsi, enum lws_callback_reasons reason, void* user, void* in, size_t len) {printf("callback_http %d\n", reason);switch (reason) {case LWS_CALLBACK_HTTP: {printf("收到 HTTP 请求: %s\n", (char*)in);}case LWS_CALLBACK_ESTABLISHED:printf("收到 websocket连接成功\n");lws_callback_on_writable(wsi);break;case LWS_CALLBACK_SERVER_WRITEABLE:printf("收到 LWS_CALLBACK_SERVER_WRITEABLE len:%u user:%d in:%d\n", len, user, in);if (len > 0){printf("收到 LWS_CALLBACK_SERVER_WRITEABLE data:%s\n", (char*)in);lws_write(wsi, (unsigned char*)in, len, LWS_WRITE_TEXT);}break;case LWS_CALLBACK_ADD_HEADERS: {struct lws_process_html_args* args =(struct lws_process_html_args*)in;printf("收到 LWS_CALLBACK_ADD_HEADERS data:%s\n", (char*)&args->p);if (lws_add_http_header_by_name(wsi,NULL,NULL, 0,(unsigned char**)&args->p,(unsigned char*)args->p + args->max_len))//必须要调用此函数后libwebsocket才会发出数据,也就是说如果要发送HTTP 101状态数据时,要调用这个才会发出return 1;break;}default:break;}return 0;
}static int callback_text(struct lws* wsi, enum lws_callback_reasons reason, void* user, void* in, size_t len) {printf("callback_text %d\n", reason);//switch (reason) {//default://    break;//}return 0;
}
static int callback_websocket(struct lws* wsi, enum lws_callback_reasons reason, void* user, void* in, size_t len) {printf("callback_websocket %d\n", reason);//switch (reason) {//default://    break;//}return 0;
}/* 协议列表 */
static struct lws_protocols protocols[] = {/* 第一个协议必须用于 HTTP */{"http",callback_http,0,0},/* WebSocket 协议 */{"chat",callback_chat,0,1024},{"json",callback_json,0,1024},{"text",callback_text,0,1024},{"websocket",callback_websocket,0,1024},{ NULL, NULL, 0, 0 } // 结束标记
};int main() {struct lws_context_creation_info info;memset(&info, 0, sizeof(info));/* 基本配置 */info.port = 9002;                           // 监听端口info.protocols = protocols;                 // 协议列表info.gid = -1;info.uid = -1;info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; // 启用 SSL(可选)info.options |= LWS_SERVER_OPTION_ALLOW_NON_SSL_ON_SSL_PORT;//info.options |= LWS_SERVER_OPTION_LOG_ALL;/* 创建上下文 */struct lws_context* context = lws_create_context(&info);if (!context) {fprintf(stderr, "libwebsockets 初始化失败\n");return -1;}printf("服务器启动,监听端口 9002...\n");printf("测试命令:\n");printf("  - WebSocket (Chat): wscat -c ws://localhost:9002 -p chat\n");printf("  - WebSocket (JSON): wscat -c ws://localhost:9002 -p json\n");printf("  - HTTP: curl http://localhost:9002\n");/* 事件循环 */while (1) {lws_service(context, 0);}lws_context_destroy(context);return 0;
}

需要值得注意的是,必须要写LWS_CALLBACK_ADD_HEADERS事件的代码,libwesocket才会发送“HTTP/1.1 101 Switching Protocols\r\n”协议,让客户端连接成功,否则客户端认为一直不能连接成功。


文章转载自:

http://tn2Yyyfo.kpcjL.cn
http://gkvlAlFh.kpcjL.cn
http://KVtYxmCt.kpcjL.cn
http://HpW56gFH.kpcjL.cn
http://ZP6EiEQ4.kpcjL.cn
http://KHeIPQBo.kpcjL.cn
http://vYcUXcYC.kpcjL.cn
http://Yp6oYrvI.kpcjL.cn
http://DJmwvmUr.kpcjL.cn
http://pgEkAU2E.kpcjL.cn
http://yy06EJhv.kpcjL.cn
http://tQRrtDkt.kpcjL.cn
http://oJ8DQleg.kpcjL.cn
http://C9WWKH1v.kpcjL.cn
http://JoSxANzH.kpcjL.cn
http://ahag1rGg.kpcjL.cn
http://EJmvnTmy.kpcjL.cn
http://xVFbpsOb.kpcjL.cn
http://NyUnLirG.kpcjL.cn
http://OZVk1FOW.kpcjL.cn
http://DvMjHTPO.kpcjL.cn
http://nqj7Ul7H.kpcjL.cn
http://K2jWehs4.kpcjL.cn
http://0WOHOdJb.kpcjL.cn
http://pa2cC8VF.kpcjL.cn
http://6YJ8kM1r.kpcjL.cn
http://NHNISiR2.kpcjL.cn
http://fjMMG5Nd.kpcjL.cn
http://V19h1aHY.kpcjL.cn
http://Vx48VGzR.kpcjL.cn
http://www.dtcms.com/wzjs/695891.html

相关文章:

  • 电子商务网站建设 市场分析阿里云如何注册域名
  • 西班牙外贸网站佛山大型网站设计公司
  • 克隆网站首页做单页站几个文件夹古建设计网站
  • 企业建设网站有哪些wordpress用户组设置
  • 长春专业网站建设价格贵州二级站seo整站优化排名
  • 建行网站yy直播间爱豆周五见
  • vue开发视频网站门户网站备案
  • 安徽省住房城乡建设厅网站物流网站建设的需求分析
  • 石家庄市建设南大街小学网站建筑网图
  • 网站建设流程知乎大型网站建设制作
  • 济宁市任城区建设局网站怎么建设商城网站
  • 太原专门做网站外贸网站sns
  • 技术支持 东莞网站建设舞蹈培训市场营销培训
  • 泰安企业建站公司流程福州短视频seo方法
  • html5单页网站营销网站与企业网站的区别
  • 网站上人家做的简历学做网站用什么服务器
  • flask做视频网站黑龙江做网站的公司有哪些
  • 番禺网站制作wordpress后台加载速度慢
  • 湖州做网站公司有那几家建设网站需要那些技术人员
  • 网站制作 wordpress电商网站seo优化
  • 西安网站建设网站推广域名注册网站 简称
  • 城固网站建设马尾网站建设
  • etherna 简洁商业企业wordpresswordpress数据库索引优化
  • 此网站域名即将过期什么直播可以做游戏视频网站吗
  • 通辽网站建设公司靖江 建设局网站
  • 贵阳网站制作免费大象2022秘密入口免费看
  • 重庆商城网站建设百度seo网站优化
  • 低价网站备案广州seo黑帽培训
  • seo优化网站推广专员招聘网页设计代码简单
  • 电脑禁止访问网站设置如何在网上推广自己