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();
}
目录
相关文章
|
14天前
|
开发框架 Linux C语言
C、C++、boost、Qt在嵌入式系统开发中的使用
C、C++、boost、Qt在嵌入式系统开发中的使用
26 1
|
21天前
|
存储 网络协议 C语言
【C/C++ 串口编程 】深入探讨C/C++与Qt串口编程中的粘包现象及其解决策略
【C/C++ 串口编程 】深入探讨C/C++与Qt串口编程中的粘包现象及其解决策略
75 0
|
21天前
|
存储 传感器 安全
【串口通信】使用C++和Qt设计和实现串口协议解析器(二)
【串口通信】使用C++和Qt设计和实现串口协议解析器
41 0
|
21天前
|
存储 开发框架 算法
【串口通信】使用C++和Qt设计和实现串口协议解析器(一)
【串口通信】使用C++和Qt设计和实现串口协议解析器
58 0
|
26天前
|
安全 前端开发 C++
C++视角下的Qt按钮:从基础应用到高级定制(二)
C++视角下的Qt按钮:从基础应用到高级定制
44 2
|
26天前
|
XML JSON 算法
C++视角下的Qt按钮:从基础应用到高级定制(一)
C++视角下的Qt按钮:从基础应用到高级定制
85 2
|
26天前
|
Linux 数据处理 C++
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用(一)
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用
68 0
|
26天前
|
存储 Linux API
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用(三)
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用
26 1
|
26天前
|
消息中间件 Linux 数据处理
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用(二)
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用
29 1
|
4天前
|
存储 算法 Linux
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
17 6

推荐镜像

更多