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)

       {

       }   

//重写QThread的run()函数,线程要做的事情就是在run()函数里处理
       void MyThread::run()
       {
              while(1)

              {
                     mutex.lock(); //进入临界区前,加锁
                     for (int i = 0; i < 10; i++)
                     {
                            std::cout << intArray[i] << " ";
                     }
                     std::cout << std::endl;
                     mutex.unlock();//退出临界区,解锁,确定同时只有一个线程处理公共资源
              }
       }

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

clown_30

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值