【C/C++学院】(20)QT:udp通信

简介: <p><span style="color:rgb(44,44,44); font-family:SimSun; font-size:20px; line-height:20px; text-align:center"><strong>基于QT的UDP协议的通信</strong></span></p> <p></p> <pre code_snippet_id="611440" snip

基于QT的UDP协议的通信

#-------------------------------------------------
#
# Project created by QtCreator 2014-05-22T21:39:26
#
#-------------------------------------------------

QT       += core gui
QT += network

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = udpchat
TEMPLATE = app


SOURCES += main.cpp\
        dialog.cpp

HEADERS  += dialog.h

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include <QLabel>
#include <QPushButton>
#include <QLineEdit>
#include <QUdpSocket>

class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog(QWidget *parent = 0);
    ~Dialog();

private:
    QLabel *label1, *label2, *label3, *label4;
    QLineEdit *edit1, *edit2, *edit3, *edit4;
    QPushButton *btn1, *btn2;
    QUdpSocket *udpsocket;


private slots:
    void on_clicked1();
    void on_clicked2();
    void dataReceived();
};

#endif // DIALOG_H

#include "dialog.h"
#include <QMessageBox>
#include <QVBoxLayout>
#include <QGridLayout>
#include <QByteArray>
#include <QHostAddress>

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{
    udpsocket = new QUdpSocket(this);

    setWindowTitle(tr("udp聊天"));//设置窗口标题
    label1 = new QLabel;
    label1->setText(tr("请输入bind端口号"));
    label2 = new QLabel;
    label2->setText(tr("请输入目的IP地址"));
    label3 = new QLabel;
    label3->setText(tr("请输入目的端口号"));
    label4 = new QLabel;
    label4->setText(tr("请输入发送消息"));


    edit1 = new QLineEdit;
    edit2 = new QLineEdit;
    edit3 = new QLineEdit;
    edit4 = new QLineEdit;

    btn1 = new QPushButton;
    btn1->setText(tr("bind"));//设置btn1标题
    btn2 = new QPushButton;
    btn2->setText(tr("发送"));//设置btn2标题

    QGridLayout *layout1 = new QGridLayout(this);

    layout1->addWidget(label1, 0, 0);//加入label1控件
    layout1->addWidget(edit1, 0, 1);//加入edit1控件
    layout1->addWidget(btn1, 1, 0);//加入btn1控件
    layout1->addWidget(label2, 2, 0);//加入label2控件
    layout1->addWidget(edit2, 2, 1);//加入edit2控件
    layout1->addWidget(label3, 3, 0);//加入label3控件
    layout1->addWidget(edit3, 3, 1);//加入label3控件
    layout1->addWidget(label4, 4, 0);//加入label4控件
    layout1->addWidget(edit4, 4, 1);//加入label4控件
    layout1->addWidget(btn2, 5, 0);//加入btn2控件

    connect(btn1, SIGNAL(clicked()), this, SLOT(on_clicked1()));
    connect(btn2, SIGNAL(clicked()), this, SLOT(on_clicked2()));
    connect(udpsocket, SIGNAL(readyRead()), this, SLOT(dataReceived()));

}

Dialog::~Dialog()
{

}

void Dialog::on_clicked1()
{
    udpsocket->close();
    udpsocket->bind(edit1->text().toInt());
}

void Dialog::on_clicked2()
{
    QHostAddress addr;
    addr.setAddress(edit2->text());
    int port = edit3->text().toInt();
    udpsocket->writeDatagram(edit4->text().toUtf8(), addr, port);
}

void Dialog::dataReceived()//接收socket消息的槽函数
{
    QHostAddress addr;
    char buf[1024];
    while(udpsocket->hasPendingDatagrams())
    {
        memset(buf, 0, sizeof(buf));
        udpsocket->readDatagram(buf, sizeof(buf), &addr);
        QMessageBox::information(this, tr("消息"), tr("来自") + addr.toString() + tr("的消息:\n") + buf);
    }
}









目录
相关文章
|
25天前
|
开发框架 Linux C语言
C、C++、boost、Qt在嵌入式系统开发中的使用
C、C++、boost、Qt在嵌入式系统开发中的使用
31 1
|
1月前
|
存储 网络协议 C语言
【C/C++ 串口编程 】深入探讨C/C++与Qt串口编程中的粘包现象及其解决策略
【C/C++ 串口编程 】深入探讨C/C++与Qt串口编程中的粘包现象及其解决策略
83 0
|
1月前
|
存储 传感器 安全
【串口通信】使用C++和Qt设计和实现串口协议解析器(二)
【串口通信】使用C++和Qt设计和实现串口协议解析器
52 0
|
1月前
|
存储 开发框架 算法
【串口通信】使用C++和Qt设计和实现串口协议解析器(一)
【串口通信】使用C++和Qt设计和实现串口协议解析器
103 0
|
1月前
|
编译器 API 数据安全/隐私保护
深入对比:Qt 的 QFile/QFileInfo 和与 C++17 Filesystem 和标准文件流 的细节剖析
深入对比:Qt 的 QFile/QFileInfo 和与 C++17 Filesystem 和标准文件流 的细节剖析
99 3
|
3天前
|
存储 网络协议 关系型数据库
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
|
1月前
|
机器学习/深度学习 文字识别 并行计算
【C/C++ OCR识别】深入探索:Qt C++与OCR识别的完美结合
【C/C++ OCR识别】深入探索:Qt C++与OCR识别的完美结合
86 2
|
1月前
|
监控 C++
C++ Qt开发:QProcess进程管理模块
Qt是一个跨平台的C++图形库,简化了窗体应用开发,支持通过拖放组件提升效率。本章节关注`QProcess`组件,它用于控制和管理进程,例如执行命令、运行可执行文件及与外部进程通信。`QProcess`提供多种方法如`start`、`waitForStarted`和`waitForFinished`等,实现启动、监控和交互。示例展示了如何使用`QProcess`获取系统进程和信息,通过`tasklist`和`systeminfo`命令,并将结果展示在`QTreeWidget`中。
29 0
C++ Qt开发:QProcess进程管理模块
|
1月前
|
SQL XML API
Qt C++ 模块 描述列表【从Qt 官网 6.5 版本翻译】
Qt C++ 模块 描述列表【从Qt 官网 6.5 版本翻译】
13 0
|
1月前
|
Java API C++
【C++ 与Qt 线程】C++ std::thread 与Qt qthread多线程混合编程
【C++ 与Qt 线程】C++ std::thread 与Qt qthread多线程混合编程
45 1

热门文章

最新文章

推荐镜像

更多