• 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);

  • 相关阅读:
    Servlet 学习笔记4
    demo:flex每个属性展示
    java-普通项目中多个模块间的引用
    Segment Routing IPv6简介
    Redis 删除策略
    Windows搭建青龙面板并且可以外网登录教程
    肝癌来时“静悄悄”?早期肝癌为什么不会痛?一文读懂→
    网络原理之TCP_IP_1
    手撸时间轮
    诗诺克科技引领数字资产智能交易革命
  • 原文地址:https://blog.csdn.net/qq_52119661/article/details/133817225