Easyx图形库应用(和Server程序进行交互)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

用图形界面库做开发,还有一部分同学是用来做游戏的。特别是网络游戏,基本上就是很多的客户端在一个服务器上面进行交流互通。大家最有直观感受的,应该就是各种棋牌类游戏,这类游戏需要很多的人,在一个平台上面互动。如果是工业应用,大家就想象成有很多的传感器需要上传数据到服务器,而我们的图形应用也是这个服务器的一个客户端而已。所以大家在掌握了图形库的开发之后,最好也能够学一下基本的网络开发,这样对自己的发展大有裨益。

1、网络服务器

现在的公司,大部分都是去租云服务,很少自己去机房搭建的。这么做的好处,就是按需进行布置。如果使用的人比较多,就多租一点服务器;使用的人少,就少用一点。

2、操作系统

服务器的操作系统大部分都是linux,以centos和ubuntu为主。少部分是windows server系统,如果自己实在是不太熟悉linux系统,使用windows server也是可以的。

3、网络开源库

网络关于tcp/ip的开源库很多,这里谈的主要是面向c/c++语言的开发库。和easyx一样,直接用posix api写网络程序也可以,就是麻烦一点。所以大家一般都是习惯用第三方网络库来进行开发,自己专注于业务即可。目前来说,有这么几个网络库用的比较多,一个是libevent,这个历史比较悠久。一个是skynet,云风开发的,大家如果不喜欢lua,也可以直接用c开发。还有一个就是今天说的muduo。

4、muduo开发库

大部分通信库都是用回调的形式进行开发的。也就是说,主要的通信流程,都被作者在后台隐藏好了。我们要做的,就是注册好自己的回调函数,在后台ok的时候,比如connect连接上,有数据被接收到的时候,都会调用我们自己的回调函数。mudo库也是如此,

复制代码
https://github.com/chenshuo/muduo/tree/master

5、muduo的echo服务器举例

对于这些库,一开始没有必要追究细节,会用即可,特别是知道自己的函数什么时候回调的就行。比如下面这个demo,里面最重要的变量就是server_变量,最重要的函数就是onConnection和onMesaage函数,

复制代码
#include <muduo/net/TcpServer.h>
#include <muduo/net/Endian.h>
#include <muduo/net/InetAddress.h>
#include <muduo/net/EventLoop.h>
#include <muduo/net/TcpConnection.h>
#include <muduo/base/Logging.h>

using namespace muduo;
using namespace muduo::net;

class EchoServer
{
public:
    EchoServer(EventLoop* loop, const InetAddress& listenAddr)
        : server_(loop, listenAddr, "EchoServer")
    {
        server_.setConnectionCallback(
            std::bind(&EchoServer::onConnection, this, std::placeholders::_1));
        server_.setMessageCallback(
            std::bind(&EchoServer::onMessage, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));
    }

    void start()
    {
        server_.start();
    }

private:
    void onConnection(const TcpConnectionPtr& conn)
    {
        if (conn->connected())
        {
            LOG_INFO << "New connection: " << conn->peerAddress().toIpPort();
        }
        else
        {
            LOG_INFO << "Connection closed: " << conn->peerAddress().toIpPort();
        }
    }

    void onMessage(const TcpConnectionPtr& conn, Buffer* buf, Timestamp time)
    {
        std::string msg = buf->retrieveAllAsString();
        LOG_INFO << "Received message: " << msg;
        conn->send(msg);  // Echo back the received message
    }

    TcpServer server_;
};

int main()
{
    EventLoop loop;
    InetAddress listenAddr(2023);  // Echo server listens on port 2023
    EchoServer server(&loop, listenAddr);
    server.start();
    loop.loop();
    return 0;
}

6、编译方法

编译的话,可以自己去网上先下载muduo,生成muduo_base和muduo_net两个静态库之后,直接用下面命令链接测试即可,

复制代码
g++ -std=c++11 -o echo_server echo_server.cpp -lmuduo_net -lmuduo_base -pthread -I3rdparty/ -Llib/

7、测试方法

echo服务器可以直接用telnet工具测试。如果是同一台电脑或者板子,可以直接telnet 127.0.0.1 2023,这样我们发送什么字符,对方就回什么字符。没有telnet工具,使用mobaxterm也可以,上面集成了telnet工具。

8、用这个程序作为跳板,去发展自己的应用

**我们从最简单的程序开始学习,但是最终目的还是为了开发产品。直接改这个echo程序,慢慢为自己所用。**比如这个程序,是不是简单改一下,就是file服务器。或者客户端比较多,可以是聊天服务器,或者是游戏服务器。甚至加上rtsp&h264内容,还可以是远程协同服务器、视频服务器。所以库只是基础,能做什么取决于我们自己。

比如github上有很多的开源网络代码,下面就是一个基于rtsp的视频传输协议代码,有兴趣的同学可以好好看下,

复制代码
https://github.com/PHZ76/RtspServer/tree/master

或者是,

复制代码
https://github.com/ouweibin/RtspServer
相关推荐
LCG元5 天前
低功耗显示方案:STM32L0驱动OLED,动态波形绘制与优化
stm32·嵌入式硬件·信息可视化
TDengine (老段)5 天前
TDengine IDMP 数据可视化——散点图
大数据·数据库·物联网·信息可视化·时序数据库·tdengine·涛思数据
发哥来了5 天前
主流GEO优化系统技术对比评测
人工智能·信息可视化
Youngchatgpt5 天前
数据科学家如何使用 ChatGPT?
人工智能·信息可视化·chatgpt
weixin_440401695 天前
Python数据分析-数据可视化(柱状图bar【双轴柱状图、动态柱状图】)
python·信息可视化·数据分析
2501_944934735 天前
高职数据可视化技术专业,怎么找远程的数据可视化兼职?
信息可视化
甲枫叶6 天前
【claude+weelinking产品经理系列16】数据可视化——用图表讲述产品数据的故事
java·人工智能·python·信息可视化·产品经理·ai编程
Highcharts.js6 天前
Highcharts热力图(Heatmap)完全指南:从基础配置到地理热力图,一文学会颜色轴数据可视化
信息可视化·数据可视化·热力图·heatmap·highcharts·地理热力图
2501_943695336 天前
高职数据可视化技术专业,怎么提升数据可视化的设计审美?
信息可视化·数据挖掘·数据分析
计算机学姐6 天前
基于SpringBoot的服装购物商城销售系统【协同过滤推荐算法+数据可视化统计】
java·vue.js·spring boot·mysql·信息可视化·mybatis·推荐算法