EasyDarwin接口的使用——使用C++编写客户端实现与EasyDarwin服务器的交互
EasyDarwin提供了接口供客户端使用,以实现客户端与其的交互。比如,根据EasyDarwin的8.1.0版本的接口文档,有获取推流列表的接口如下所示:
我们可以测试一下上述接口。首先启动EasyDarwin服务器,启动后在浏览器(比如QQ浏览器中)输入“http://127.0.0.1:10008/api/v1/pushers”(格式为:'流媒体服务器所在电脑的IP' : 'easydarwin.ini中设置的http端口号' + '接口消息'),输入后按回车,可以看到浏览器显示如下信息。因为目前没有在推流,所以显示的信息如下所示,total为0,rows也没有。这些显示的信息就是EasyDarwin服务器收到浏览器发给它的"api/v1/pushers"消息后返回的响应。可以看到这个接口是正常的。
接下来我们以获取推流列表为例子,根据上述接口编写C++客户端。在vs2015中新建控制台程序,输入如下代码。代码参考《C++ 一个简单的实现HTTP GET和POST请求的类》
HttpRequest.h
#pragma once
#include <string>
#include <vector>class HttpRequest
{
public:HttpRequest(const std::string& ip, int port);~HttpRequest(void);std::string HttpGet(std::string req); //进行Http的GET请求
private:std::string m_ip; //需要连接的http服务器的IPint m_port; //需要连接的http服务器的端口号
};
HttpRequest.cpp
#include "HttpRequest.h"
#include <WinSock.h>
#include <iostream>#pragma comment(lib, "ws2_32.lib")HttpRequest::HttpRequest(const std::string& ip, int port) : m_ip(ip), m_port(port)
{
}HttpRequest::~HttpRequest(void)
{
}//进行Http的GET请求
std::string HttpRequest::HttpGet(std::string req)
{std::string ret = ""; //返回Http的Response(响应)try{/*进行socket初始化*/WSADATA wData;::WSAStartup(MAKEWORD(2, 2), &wData);SOCKET clientSocket = socket(AF_INET, 1, 0);struct sockaddr_in ServerAddr = { 0 };ServerAddr.sin_addr.s_addr = inet_addr(m_ip.c_str());ServerAddr.sin_port = htons(m_port);ServerAddr.sin_family = AF_INET;int errNo = connect(clientSocket, (sockaddr *)&ServerAddr, sizeof(ServerAddr)); //连接服务器if (0 == errNo) //如果成功连接上服务器{std::string strSend = " HTTP/1.1\r\n""Host: 192.168.1.104:10008\r\n""Connection: keep-alive\r\n""Cache-Control: max-age=0\r\n""Upgrade-Insecure-Requests: 1\r\n""User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3732.400 QQBrowser/10.5.3819.400\r\n""Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\r\n""Accept-Encoding: gzip, deflate\r\n""Accept-Language: zh-CN,zh;q=0.9\r\n""Cookie: token=42C0EN0ZR\r\n\r\n";strSend = "GET " + req + strSend;errNo = send(clientSocket, strSend.c_str(), strSend.length(), 0); //发送缓冲区strSend中的信息给服务器if (errNo > 0){std::cout << "发送成功" << std::endl;}else{std::cout << "发送失败" << std::endl;//std::cout << "errNo:" << errNo << std::endl;return ret;}int buf_size = 5000;char *bufRecv = new char[buf_size](); //申请buf_size大小的空间并初始化为0,将指针bufRecv指向该空间errNo = recv(clientSocket, bufRecv, buf_size, 0);if (errNo > 0) // 如果接收响应成功,则返回接收的数据内容{ret = bufRecv; delete[] bufRecv;}else //如果接收响应失败{std::cout << "接收失败" << std::endl;delete[] bufRecv;//std::cout << "errNo:" << errNo << std::endl;return ret;}}else //如果连接不上服务器{errNo = WSAGetLastError();std::cout << "errNo:" << errNo << std::endl;}// socket环境清理::WSACleanup();}catch (...){return "";}return ret;
}
main.cpp
#include "HttpRequest.h"
#include <iostream>
#include <Windows.h>int main(int argc, char *argv[])
{HttpRequest httpReq("127.0.0.1", 10008);std::string res = httpReq.HttpGet("/api/v1/pushers");std::cout << res << std::endl;return 0;
}
输入代码完成后,编译,运行,可以看到控制台输出如下,证明客户端获取EasyDarwin的推流列表成功了。
这里要注意一个问题,如果在客户端中,仅仅发消息“Get /api/v1/pushers”给服务器是无法成功获取响应的,还得发HTTP头。使用Wireshark对客户端发送的数据进行抓包,可以看到发送的数据如下所示,可以看到除了“Get /api/v1/pushers”,还发了很多其它东西。
EasyDarwin接口的使用——使用C++编写客户端实现与EasyDarwin服务器的交互相关推荐
- Android客户端与PC端服务器进行交互
对于Android和pc的通信,有很多没有写好的东西,也借鉴了很多大佬写的程序,发出来算是一个集合,有很多不足之处,请各位大佬指点. 首先是pc端的服务器(运用ServerSocket去进行交互): ...
- php 动态彩码辨色 接口的调用_好用的云函数!后端低代码接口开发,零基础编写API接口...
前言 在开发项目过程中,经常需要用到API接口,实现对数据库的CURD等操作. 不管你是专业的PHP开发工程师,还是客户端开发工程师,或者是不懂编程但懂得数据库SQL查询,又或者是完全不太懂技术的人, ...
- 好用的云函数!后端低代码接口开发,零基础编写API接口
前言 在开发项目过程中,经常需要用到API接口,实现对数据库的CURD等操作. 不管你是专业的PHP开发工程师,还是客户端开发工程师,或者是不懂编程但懂得数据库SQL查询,又或者是完全不太懂技术的人, ...
- 0729------Linux网络编程----------使用 select 、poll 和 epoll 模型 编写客户端程序
1.select 模型 1.1 select 函数原型如下,其中 nfds 表示的描述符的最大值加1(因为这里是左闭右开区间),中间三个参数分别表示要监听的不同类型描述符的集合,timeout用来表示 ...
- Netty工作笔记0042---Netty入门--编写客户端
技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 这里来编写客户端 跟服务器的编写实际上是很像的. 可以看到编写上基本都是差不多的,可以看到客户端, ...
- Netty编写客户端
Netty编写客户端 上一篇博客讲了一下解码器,但是其实没有涉及到客户端的编写,今天补上这篇博客.同时深入了解一下Netty(对于我来说).加深自己的印象. 上面是一个简单的服务端的例子,之前 ...
- 前端、后端、客户端、数据库、服务器的简单总结
项目开发的基本流程大致如下: 1.需求分析: 2.设计架构,数据库结构,数据量评估.模块结构.接口.业务逻辑: 3.开始搭环境,建数据库,部署到开发环境: 4.给前端提供假数据,以便并行开发: 5.完 ...
- [ 搭建Redis本地服务器实践系列三 ] :图解Redis客户端工具连接Redis服务器
原文:[ 搭建Redis本地服务器实践系列三 ] :图解Redis客户端工具连接Redis服务器 上一章 [ 搭建Redis本地服务器实践系列二 ] :图解CentOS7配置Redis 介绍了Red ...
- linux做一个客户端与WemosD1作为服务器的无线通信(局域网通信)
参考:linux做一个客户端与WemosD1作为服务器的无线通信(局域网通信) 作者:枕上 发布时间:2021-07-19 23:33:44 网址:https://blog.csdn.net/jinc ...
- socket服务器显示未响应,QTCPSOCKET 客户端已连接 而服务器无响应
最近在使用qt coding一个项目时,使用到了qtcpsocket模块来编写客户端与服务器.在windows平台下还能正常工作,但是在ubuntu平台下,客户端提示已连接时,服务器却没有响应.经过排 ...
最新文章
- 双调TSP问题通俗讲解
- 为什么batchnormalize 有效
- 先收藏!关于Java类、接口、枚举的知识点大汇总
- Ecplice安装Spring插件could noe find jar(超详细解决)
- 2019年前端开发10大战略性技术蓝图
- [译]Introducing ASP.NET vNext and MVC 6
- 〖Demo〗-- 计算器
- 排序算法专题-希尔排序
- 计算机组成原理(微课版 谭志虎)试题及答案
- python静态分析工具_7 个顶级静态代码分析工具
- 多媒体计算机辅助英语教学,多媒体计算机辅助英语教学初探
- 不再当码农-Flash AS3.0多个影片剪辑实现同一功能循环问题
- Gurub linux windows,windows10安装ubuntu双系统教程(绝对史上最详细)
- 为何爱会伤人/为家爱会伤人
- centos Iptables学习笔记
- Http 400错误重现实验及解决办法
- 转载:word2019写公式序号
- CSDN个人博客访问量突破300万
- 错误	CS0246	未能找到类型或命名空间名“XXXX”(是否缺少 using 指令或程序集引用?)
- 赛题类型 Web、Crypto、Pwn、Reverse、Misc 各是指什么意思?