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
相关推荐
计算机学姐2 小时前
基于SpringBoot的高校竞赛管理系统
java·spring boot·后端·spring·信息可视化·tomcat·mybatis
CodeCraft Studio3 小时前
高性能图表库SciChart助力机器人实现实时AI驱动的性能提升
人工智能·信息可视化·机器人·数据可视化·scichart·高性能图表库·wpf图表库
财经资讯数据_灵砚智能4 小时前
基于全球经济类多源新闻的NLP情感分析与数据可视化(日间)2026年4月9日
人工智能·python·信息可视化·自然语言处理·ai编程
书到用时方恨少!4 小时前
Python Matplotlib 使用指南:数据可视化的画笔
python·信息可视化·matplotlib
计算机学姐4 小时前
基于SpringBoot的在线学习网站平台【个性化推荐+数据可视化+课程章节学习】
java·vue.js·spring boot·后端·学习·mysql·信息可视化
财经资讯数据_灵砚智能5 小时前
基于全球经济类多源新闻的NLP情感分析与数据可视化(夜间-次晨)2026年4月8日
大数据·人工智能·信息可视化·自然语言处理·ai编程
城数派5 小时前
2014-2025年全国监测站点的逐月空气质量数据(15个指标\Excel\Shp格式)
arcgis·信息可视化·数据分析·excel
2501_944934731 天前
产品策划需要哪些数据分析能力?如何用数据验证需求优先级
信息可视化·数据挖掘·数据分析
财经资讯数据_灵砚智能1 天前
基于全球经济类多源新闻的NLP情感分析与数据可视化(夜间-次晨)2026年4月7日
人工智能·python·信息可视化·自然语言处理·ai编程
AI_零食1 天前
Flutter 框架跨平台鸿蒙开发 - 颜色听觉化应用
学习·flutter·信息可视化·开源·harmonyos