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









目录
打赏
0
0
0
0
13
分享
相关文章
Redis的实现一:c、c++的网络通信编程技术,先实现server和client的通信
本文介绍了使用C/C++进行网络通信编程的基础知识,包括创建socket、设置套接字选项、绑定地址、监听连接以及循环接受和处理客户端请求的基本步骤。
102 6
在C++的QT框架中实现SQLite数据库的连接与操作
以上就是在C++的QT框架中实现SQLite数据库的连接与操作的基本步骤。这些步骤包括创建数据库连接、执行SQL命令、处理查询结果和关闭数据库连接。在实际使用中,你可能需要根据具体的需求来修改这些代码。
121 14
c++ linux通过实现独立进程之间的通信和传递字符串 demo
的进程间通信机制,适用于父子进程之间的数据传输。希望本文能帮助您更好地理解和应用Linux管道,提升开发效率。 在实际开发中,除了管道,还可以根据具体需求选择消息队列、共享内存、套接字等其他进程间通信方
85 16
C++跨平台框架Qt
Qt是一个功能强大的C++跨平台应用程序开发框架,支持Windows、macOS、Linux、Android和iOS等操作系统。它提供了250多个C++类,涵盖GUI设计、数据库操作、网络编程等功能。Qt的核心特点是跨平台性、丰富的类库、信号与槽机制,以及良好的文档和社区支持。Qt Creator是其官方IDE,提供了一整套开发工具,方便创建、编译、调试和运行应用程序。Qt适用于桌面、嵌入式和移动应用开发。
WK
159 5
Linux C/C++之TCP / UDP通信
这篇文章详细介绍了Linux下C/C++语言实现TCP和UDP通信的方法,包括网络基础、通信模型、编程示例以及TCP和UDP的优缺点比较。
190 0
Linux C/C++之TCP / UDP通信
QT多插件通信框架CTK编译记录
本文记录了编译QT多插件通信框架CTK的过程,包括编译结果截图、部署配置、Log4Qt编译配置、参考链接和拓展资料。文中提供了详细的编译步骤和配置文件示例,以及相关的资源链接。
224 0
QT多插件通信框架CTK编译记录
C语言 网络编程(七)UDP通信创建流程
本文档详细介绍了使用 UDP 协议进行通信的过程,包括创建套接字、发送与接收消息等关键步骤。首先,通过 `socket()` 函数创建套接字,并设置相应的参数。接着,使用 `sendto()` 函数向指定地址发送数据。为了绑定地址,需要调用 `bind()` 函数。接收端则通过 `recvfrom()` 函数接收数据并获取发送方的地址信息。文档还提供了完整的代码示例,展示了如何实现 UDP 的发送端和服务端功能。
|
9月前
|
C++
C++ Qt开发:QUdpSocket网络通信组件
QUdpSocket是Qt网络编程中一个非常有用的组件,它提供了在UDP协议下进行数据发送和接收的能力。通过简单的方法和信号,可以轻松实现基于UDP的网络通信。不过,需要注意的是,UDP协议本身不保证数据的可靠传输,因此在使用QUdpSocket时,可能需要在应用层实现一些机制来保证数据的完整性和顺序,或者选择在适用的场景下使用UDP协议。
373 2
|
9月前
|
C++ QT 单例模式
C++ QT 单例模式
159 0

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等