• Qt编程,文件操作、UDP通信


    目录

    1、文件类 QFile 

    2、 UPD/TCP网络编程

       1、##UDP客户端

        2、##UDP服务器端

    1、文件类 QFile 

           QFile file(filename);

           file.exists()

           file.setFileName(filename1);

           file.fileName()

           file.bytesAvailable()

           file.size()

           file.copy("2.txt")

           file1.errorString()

           bool file.open();   --- 打开文件

                  QIODevice::ReadOnly

                  QIODevice::WriteOnly

                  QIODevice::ReadWrite

                  QIODevice::Trancate

                  QIODevice::Text

           file.atEnd();   ---判断是否到达文件末尾

           file.read();    --- 按字节读取文件内容

           file.readLine(); --- 读取一行

           file.readAll();  --- 读取所有内容

           file.write();  --- 写入内容

           file.close();  --- 关闭文件 

          

           QThread & QMutex

           //继承QThread类,重写run方法

           start() --- 启动线程

           terminate() --- 终止线程

          

           QMutex: 互斥锁

           lock(); --- 加锁

           unlock(); --- 解锁

          

           QMutex mutex;

           //要使用QThread,一般可以新建自己的类,继承与QThread

           MyThread::MyThread(QObject *parent) : QThread(parent)

           {

           }   

    1. //重写QThread的run()函数,线程要做的事情就是在run()函数里处理
    2.        void MyThread::run()
    3.        {
    4.               while(1)
    5.               {
    6.                      mutex.lock(); //进入临界区前,加锁
    7.                      for (int i = 0; i < 10; i++)
    8.                      {
    9.                             std::cout << intArray[i] << " ";
    10.                      }
    11.                      std::cout << std::endl;
    12.                      mutex.unlock();//退出临界区,解锁,确定同时只有一个线程处理公共资源
    13.               }
    14.        }

    2、 UPD/TCP网络编程

           qmake: QT += network

           UDP: QUdpSocket

       1、##UDP客户端

        //创建套接字

        socket = new QUdpSocket(this);

        //连接数据到达信号和槽函数

        //QUdpSocket::readyRead

        connect(socket, &QUdpSocket::readyRead, this, &Widget::data_ready_handler);

           //当前存在没有处理数据包

           while (socket->hasPendingDatagrams())

           {

                  QByteArray datagram;

                  //根据数据报的大小调节接收的字节数组的大小

                  datagram.resize(socket->pendingDatagramSize());

                  //接收套接字的数据到字节数组

                  socket->readDatagram(datagram.data(), datagram.size());

                  //将内容追加到接收区的文本编辑框中

                  ui->te_receive->append(QString::fromLocal8Bit(datagram));

           }     

          

        //发送数据报到服务器端,指定服务器的IP地址和端口

        if (socket->writeDatagram(ui->te_send->toPlainText().toLocal8Bit(), QHostAddress(ip), port.toUShort()) == -1)

        {

            qDebug() << "发送数据失败";

        }

        else

        {

            qDebug() << "发送数据成功";

        }

        2、##UDP服务器端

        //创建服务器的套接字

        socket = new QUdpSocket(this);

        //服务器绑定IP地址和端口, 唯一的服务器比客户端多的一个步骤

        socket->bind(QHostAddress::AnyIPv4, 8888);

          

        //发送数据报到客户端

        if (socket->writeDatagram(ui->te_send->toPlainText().toLocal8Bit(), ip, port) == -1)

        {

            qDebug() << "发送数据失败";

        }

        else

        {

            qDebug() << "发送数据成功";

        }     

          

        //读取数据报的数据,同时获取客户端的IP地址和指针,方便发送回数据给客户端

        socket->readDatagram(datagram.data(), datagram.size(), &ip, &port);

  • 相关阅读:
    《When you are old》一如苇中的风,轻柔却难忘
    MongoDB游标
    Java代码中如何计算HashMap对象中元素个数呢?
    使用缓存(Cache)的几种方式,回顾一下~~~
    深入理解Linux2.6内核中sys_mmap系统调用
    pytest学习和使用6-fixture如何使用?
    Vue的详细教程--入门
    后端——面试题-注册、登录、数据库egg-mysql、svg验证码、服务层Service
    深入学习 Redis Sentinel - 基于 DockerCompose 编排哨兵分布式架构,理解工作原理
    url自动编码问题,包含; / ? : @ & = + $ , #的密文Http url请求问题
  • 原文地址:https://blog.csdn.net/qq_52119661/article/details/133817225