zoukankan      html  css  js  c++  java
  • C/C++ Qt 命令行版网络通信

    实现简单的结构体传输: 两端传输结构体。

    服务端

    #include <QCoreApplication>
    #include <QTcpServer>
    #include <QTcpSocket>
    #include <iostream>
    
    struct MyStruct
    {
        char uname[7];
        qint32 id;
    };
    
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
    
        MyStruct ptr;
        QTcpServer server;
    
        server.listen(QHostAddress::Any,9000);
        server.waitForNewConnection(100000);
    
        QTcpSocket *socket;
    
        socket = server.nextPendingConnection();
        while(socket->state() && QAbstractSocket::ConnectedState)
        {
            socket->waitForReadyRead(1000);
            socket->read((char*)&ptr,sizeof(MyStruct));
            std::cout << ptr.uname << std::endl;
    
            socket->write((char *)"sz",sizeof("sz"));
        }
    
        socket->close();
        server.close();
        return a.exec();
    }
    

    客户端

    #include <QCoreApplication>
    #include <QTcpServer>
    #include <QTcpSocket>
    #include <iostream>
    
    struct MyStruct
    {
        char uname[7];
        qint32 id;
    };
    
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
    
        QTcpSocket socket;
    
        MyStruct ptr = {"abc",1001};
    
        socket.connectToHost(QHostAddress::LocalHost,9000);
    
        while(socket.state() && QAbstractSocket::ConnectedState)
        {
            socket.waitForConnected();
            socket.write((char *)&ptr,sizeof(MyStruct));
    
            socket.waitForBytesWritten();
            socket.waitForReadyRead(10000);
    
            char sz_ref[1024]={0};
    
            QByteArray qb = socket.readAll();
    
            QString str;
            str.prepend(qb);
            std::cout << str.toStdString() << std::endl;
        }
    
        socket.close();
        return a.exec();
    }
    

    实现简单传递字符串:

    client

    #include <QCoreApplication>
    #include <QTcpServer>
    #include <QTcpSocket>
    #include <iostream>
    
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
    
        QTcpSocket socket;
        socket.connectToHost(QHostAddress::LocalHost,9000);
    
        if(socket.state() && QAbstractSocket::ConnectedState)
        {
            socket.waitForReadyRead(10000);
    
            QByteArray ref = socket.readAll();
    
            QString ref_string;
    
            ref_string.prepend(ref);
    
            std::cout << ref_string.toStdString() << std::endl;
        }
    
        socket.close();
        return a.exec();
    }
    

    server

    #include <QCoreApplication>
    #include <QTcpServer>
    #include <QTcpSocket>
    #include <iostream>
    
    struct MyStruct
    {
        char uname[7];
        qint32 id;
    };
    
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
    
        MyStruct ptr;
        QTcpServer server;
    
        server.listen(QHostAddress::Any,9000);
        server.waitForNewConnection(100000);
    
        QTcpSocket *socket;
    
        socket = server.nextPendingConnection();
        if(socket->state() && QAbstractSocket::ConnectedState)
        {
            QString str = "abcde";
            QByteArray bytes = str.toUtf8();
            socket->write(bytes.data(),bytes.length());
        }
    
        socket->close();
        server.close();
        return a.exec();
    }
    

    简单通信框架

    server

    #include <QCoreApplication>
    #include <QTcpServer>
    #include <QTcpSocket>
    #include <iostream>
    
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
        QTcpServer server;
    
        server.listen(QHostAddress::Any,9000);
        server.waitForNewConnection(100000);
    
        QTcpSocket *socket;
    
        socket = server.nextPendingConnection();
        if(socket->state() && QAbstractSocket::ConnectedState)
        {
            // 获取CPU数据
            QString str = "GetCPU";
            QByteArray bytes = str.toUtf8();
            socket->write(bytes.data(),bytes.length());
    
            // 接收返回结果
            socket->waitForReadyRead(10000);
            QByteArray ref = socket->readAll();
            QString ref_buffer(ref);
            std::cout << "返回结果: " << ref_buffer.toStdString() << std::endl;
        }
    
        socket->close();
        server.close();
        return a.exec();
    }
    

    client

    #include <QCoreApplication>
    #include <QTcpServer>
    #include <QTcpSocket>
    #include <iostream>
    #include <QString>
    
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
        QTcpSocket socket;
    
        while(1)
        {
            // 循环链接服务器
            socket.connectToHost(QHostAddress::LocalHost,9000);
    
            // 循环接收数据包,并处理请求
            while(socket.state() && QAbstractSocket::ConnectedState)
            {
                socket.waitForReadyRead(10000);
    
                // 将字节序转为字符串
                QByteArray ref = socket.readAll();
                QString ref_string(ref);
    
                if( (QString::compare(ref_string,"GetCPU")) == 0)
                {
                    std::cout << "获取CPU数据" << std::endl;
    
                    QString str = "94%";
                    QByteArray bytes = str.toUtf8();
                    socket.write(bytes.data(),bytes.length());
                }
                else if( QString::compare(ref_string,"GetMemory") == 0)
                {
                    std::cout << "ref memory" << std::endl;
                }
                else if( QString::compare(ref_string,"GetLoadAvg") == 0)
                {
                    std::cout << "ref load avg" << std::endl;
                }
            }
        }
    
        socket.close();
        return a.exec();
    }
    
    文章出处:https://www.cnblogs.com/LyShark/p/15407428.html
    版权声明:本博客文章与代码均为学习时整理的笔记,博客中除去明确标注有参考文献的文章,其他文章 [均为原创] 作品,转载请 [添加出处] ,您添加出处是我创作的动力!

    如果您恶意转载本人文章并被本人发现,则您的整站文章,将会变为我的原创作品,请相互尊重 !
    转载规范 点击阅读 如果您转载本人文章,则视为您默认同意此规范约定。
  • 相关阅读:
    最短路径:HDU2006-一个人的旅行(多个起点,多个终点)
    最短路径(最基础,经典的模板和思想):HDU-2544最短路
    数学算法:poweroj1026-丑数(根据固定倍数得到从小到大的序列)
    动态规划:ZOJ1074-最大和子矩阵 DP(最长子序列的升级版)
    数论:HDU1066-Last non-zero Digit in N!
    容斥原理:HDU-4135Co-prime
    数学算法:求一个数的质因子
    动态规划(入门,滚动数组,记录的都是状态):SWUSTACM-1010 魔兽争霸之最后的反击
    动态规划(入门):各种数字三角形
    动态规划:HDU2571-命运
  • 原文地址:https://www.cnblogs.com/LyShark/p/15407428.html
Copyright © 2011-2022 走看看