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服务器的交互相关推荐

  1. Android客户端与PC端服务器进行交互

    对于Android和pc的通信,有很多没有写好的东西,也借鉴了很多大佬写的程序,发出来算是一个集合,有很多不足之处,请各位大佬指点. 首先是pc端的服务器(运用ServerSocket去进行交互): ...

  2. php 动态彩码辨色 接口的调用_好用的云函数!后端低代码接口开发,零基础编写API接口...

    前言 在开发项目过程中,经常需要用到API接口,实现对数据库的CURD等操作. 不管你是专业的PHP开发工程师,还是客户端开发工程师,或者是不懂编程但懂得数据库SQL查询,又或者是完全不太懂技术的人, ...

  3. 好用的云函数!后端低代码接口开发,零基础编写API接口

    前言 在开发项目过程中,经常需要用到API接口,实现对数据库的CURD等操作. 不管你是专业的PHP开发工程师,还是客户端开发工程师,或者是不懂编程但懂得数据库SQL查询,又或者是完全不太懂技术的人, ...

  4. 0729------Linux网络编程----------使用 select 、poll 和 epoll 模型 编写客户端程序

    1.select 模型 1.1 select 函数原型如下,其中 nfds 表示的描述符的最大值加1(因为这里是左闭右开区间),中间三个参数分别表示要监听的不同类型描述符的集合,timeout用来表示 ...

  5. Netty工作笔记0042---Netty入门--编写客户端

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 这里来编写客户端 跟服务器的编写实际上是很像的. 可以看到编写上基本都是差不多的,可以看到客户端, ...

  6. Netty编写客户端

    Netty编写客户端 ​ 上一篇博客讲了一下解码器,但是其实没有涉及到客户端的编写,今天补上这篇博客.同时深入了解一下Netty(对于我来说).加深自己的印象. ​ 上面是一个简单的服务端的例子,之前 ...

  7. 前端、后端、客户端、数据库、服务器的简单总结

    项目开发的基本流程大致如下: 1.需求分析: 2.设计架构,数据库结构,数据量评估.模块结构.接口.业务逻辑: 3.开始搭环境,建数据库,部署到开发环境: 4.给前端提供假数据,以便并行开发: 5.完 ...

  8. [ 搭建Redis本地服务器实践系列三 ] :图解Redis客户端工具连接Redis服务器

    原文:[ 搭建Redis本地服务器实践系列三 ] :图解Redis客户端工具连接Redis服务器 上一章 [ 搭建Redis本地服务器实践系列二 ] :图解CentOS7配置Redis  介绍了Red ...

  9. linux做一个客户端与WemosD1作为服务器的无线通信(局域网通信)

    参考:linux做一个客户端与WemosD1作为服务器的无线通信(局域网通信) 作者:枕上 发布时间:2021-07-19 23:33:44 网址:https://blog.csdn.net/jinc ...

  10. socket服务器显示未响应,QTCPSOCKET 客户端已连接 而服务器无响应

    最近在使用qt coding一个项目时,使用到了qtcpsocket模块来编写客户端与服务器.在windows平台下还能正常工作,但是在ubuntu平台下,客户端提示已连接时,服务器却没有响应.经过排 ...

最新文章

  1. 双调TSP问题通俗讲解
  2. 为什么batchnormalize 有效
  3. 先收藏!关于Java类、接口、枚举的知识点大汇总
  4. Ecplice安装Spring插件could noe find jar(超详细解决)
  5. 2019年前端开发10大战略性技术蓝图
  6. [译]Introducing ASP.NET vNext and MVC 6
  7. 〖Demo〗-- 计算器
  8. 排序算法专题-希尔排序
  9. 计算机组成原理(微课版 谭志虎)试题及答案
  10. python静态分析工具_7 个顶级静态代码分析工具
  11. 多媒体计算机辅助英语教学,多媒体计算机辅助英语教学初探
  12. 不再当码农-Flash AS3.0多个影片剪辑实现同一功能循环问题
  13. Gurub linux windows,windows10安装ubuntu双系统教程(绝对史上最详细)
  14. 为何爱会伤人/为家爱会伤人
  15. centos Iptables学习笔记
  16. Http 400错误重现实验及解决办法
  17. 转载:word2019写公式序号
  18. CSDN个人博客访问量突破300万
  19. 错误 CS0246 未能找到类型或命名空间名“XXXX”(是否缺少 using 指令或程序集引用?)
  20. 赛题类型 Web、Crypto、Pwn、Reverse、Misc 各是指什么意思?

热门文章

  1. 软件测试第三章课后习题
  2. 《深入浅出WPF》读书笔记
  3. H3CSE认证网络工程师视频课程-广域网-宋文峰-专题视频课程
  4. Bash 编程易犯的错误大全
  5. ik做尾巴摆动 maya_Maya表达式控制动力学动画之尾巴(图文)
  6. Maven 菜鸟教程 4 常用dos命令
  7. 漫谈云计算网络(二): 云计算网络的应用场景
  8. 淘宝抢拍器 chrome extension实现
  9. 【资源导航】我所用到过的工具及下载地址
  10. android 谷歌输入法切换,ANDROID谷歌拼音 输入法肿么切换?