IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> QT中UDP套接字的使用 -> 正文阅读

[网络协议]QT中UDP套接字的使用

实现:两个对话框之间利用udp套接字进行通信。
UdpSocket:面向无连接
步骤:1.设置好自身端口号,发送方的端口号和IP
2.通过套接字绑定端口号bind
3. 书写报文writeDatagram(报文内容,对方IP地址,对方端口号)
4. 监听信号ReadyRead,读取报文readDatagram
界面布局(利用UI设计):
布局
各控件类型即名字

代码:
widget.cpp

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QUdpSocket>
#include <QDebug>
#include "mytexteidt.h"
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT
public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
    //定义套接字
    QUdpSocket *udp;
private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //设置端口号和ip
    ui->myport->setText("8888");
    ui->toport->setText("9999");
    //都是在自己的电脑上
    ui->toIP->setText("127.0.0.1");
    udp=new QUdpSocket(this);
    //绑定自身端口号
    udp->bind(ui->myport->text().toInt());
    //设置发送信号
    connect(ui->send,&QPushButton::clicked,[=](){
         //文本框内无信息,则忽略发送信号
        if(ui->input->toPlainText().isEmpty()) return;
        //发送数据
        udp->writeDatagram(ui->input->toHtml().toUtf8(),//发送的内容,
                           QHostAddress(ui->toIP->text()),//发送的IP
                           ui->toport->text().toInt());//对方端口
        //显示在记录上
        ui->record->append("I:");
        ui->record->append(ui->input->toPlainText());

        //清空聊天框
        ui->input->clear();
    });

    //接收数据
    connect(udp,&QUdpSocket::readyRead,[=](){
        //获取读取报文的长度
       int recievesize=udp->pendingDatagramSize();
       //设置出array存放接收的报文内容
       QByteArray array=QByteArray(recievesize,0);
       //读取报文
       udp->readDatagram(array.data(),recievesize);
       //同步聊天记录
       ui->record->append("he:");
       ui->record->append(array);
    });
    //这个信号连接是为了实现在文本框内按回车能够发出信息
    connect(ui->input,&myTextEidt::Send,ui->send,[=](){
        ui->send->clicked();
    });
}
Widget::~Widget()
{
    delete ui;
}

对方的窗口设置一致,只需要置换端口号即可,其余一样

自定义了一个textedit,为了实现自定义的键盘事件,需要把ui窗口中的文本框提升为自定义的文本框类型。
mytexteidt.h

#ifndef MYTEXTEIDT_H
#define MYTEXTEIDT_H

#include <QWidget>
#include <QTextEdit>
#include <QKeyEvent>
#include <QDebug>
class myTextEidt : public QTextEdit
{
    Q_OBJECT
public:
    explicit myTextEidt(QWidget *parent = nullptr);
    void keyPressEvent(QKeyEvent *e);//自定义键盘事件
signals:
    void Send();//自定义信号
};

#endif // MYTEXTEIDT_H

mytexteidt.cpp

#include "mytexteidt.h"
myTextEidt::myTextEidt(QWidget *parent) : QTextEdit(parent)
{}
void myTextEidt::keyPressEvent(QKeyEvent *e)
{
    if(e->key()==Qt::Key_Return)//点击回车,发送信号
    //这里的回车不是Key_Enter!!
    {
        this->Send();
        return;
    }
    return QTextEdit::keyPressEvent(e);
}

main.cpp

#include "widget.h"
#include "you.h"
#include <QApplication>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.setWindowTitle("用户1");
    w.show();
    You y;
    y.setWindowTitle("用户2");
    y.show();
    return a.exec();
}

最终效果

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-07-11 16:55:33  更:2021-07-11 16:56:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 17:47:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码