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
相关推荐
Guheyunyi18 小时前
消防管理系统如何重构现代空间防御体系
大数据·运维·人工智能·安全·信息可视化·重构
OG one.Z18 小时前
08_Matplotlib数据可视化
信息可视化·matplotlib
没有梦想的咸鱼185-1037-166319 小时前
SCI论文写作:从实验设计到发表(选题、文献调研、实验设计、数据分析、论文结构及语言规范)
人工智能·信息可视化·数据分析·ai写作
聊聊MES那点事20 小时前
汽车零部件MES系统实施案例介绍
人工智能·信息可视化·汽车·数据可视化
white-persist1 天前
XXE 注入漏洞全解析:从原理到实战
开发语言·前端·网络·安全·web安全·网络安全·信息可视化
王严培.1 天前
7.MATLAB疑难问题诊疗的技术
开发语言·matlab·信息可视化
IT毕设梦工厂1 天前
大数据毕业设计选题推荐-基于大数据的人体生理指标管理数据可视化分析系统-Hadoop-Spark-数据可视化-BigData
大数据·hadoop·信息可视化·spark·毕业设计·源码·bigdata
我要学习别拦我~1 天前
数据比例与尺度:如何避免让图“放大”差异
经验分享·信息可视化·数据可视化
emperinter1 天前
图表全能王 (ChartStudio) 新增径向树图 (Radial Tree Diagram):创新层级数据可视化
信息可视化·数据挖掘·数据分析