前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用Qt实现简单的udp/ip通信

使用Qt实现简单的udp/ip通信

作者头像
Sindsun
发布2019-12-06 17:47:48
3.6K0
发布2019-12-06 17:47:48
举报
文章被收录于专栏:狂码一生狂码一生

使用UDP其实不用区分服务器端和客户端,直接用同一程序就能建立连接,下面直接贴出代码

1、头文件

代码语言:javascript
复制
#ifndef SERVERWIDGET_H
#define SERVERWIDGET_H

#include <QWidget>

#include <QUdpSocket> //UDP套接字

namespace Ui {
class ServerWidget;
}

class ServerWidget : public QWidget
{
    Q_OBJECT

public:
    explicit ServerWidget(QWidget *parent = 0);
    ~ServerWidget();

    void dealMsg(); // 处理对方发过来的数据

private slots:
    void on_buttonSend_clicked();

    void on_buttonClose_clicked();

private:
    Ui::ServerWidget *ui;

    QUdpSocket *udpSocket;
};

#endif // SERVERWIDGET_H

2、cpp文件

代码语言:javascript
复制
#include "serverwidget.h"
#include "ui_serverwidget.h"

#include <QHostAddress>

ServerWidget::ServerWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::ServerWidget)
{
    ui->setupUi(this);

    setWindowTitle("服务器:8899");

    udpSocket = NULL;

    //分配空间,指定父对象
    udpSocket = new QUdpSocket(this);
    //绑定
    udpSocket->bind(8899);
    //当对方成功发送数据过来
    //自动触发readyRead
    connect(udpSocket, &QUdpSocket::readyRead, this, &ServerWidget::dealMsg);
}

ServerWidget::~ServerWidget()
{
    delete ui;
}
//处理对方发过来的数据
void ServerWidget::dealMsg()
{
    //先读取对方发送的内容
    char buf[1024] = {0};
    //定义一个对象获取对方信息
    QHostAddress cliAddr;
    quint16 port; //对方端口
    qint64 len = udpSocket->readDatagram(buf,sizeof(buf), &cliAddr, &port);
    if(len > 0){
        //字符串格式化
        QString str = QString("[%1:%2] %3").arg(cliAddr.toString()).arg(port).arg(buf);
        //给编辑区设定内容
        ui->textEditRead->setText(str);
    }
}
//发送数据
void ServerWidget::on_buttonSend_clicked()
{
    if(udpSocket == NULL){
        return;
    }
    //先获取对方的IP和端口
    QString ip = ui->lineEditIp->text();
    qint16 port = ui->lineEditPort->text().toInt();
    //获取编辑区内容
    QString contentStr = ui->textEditRead->toPlainText();
    //给指定的IP发送数据
    udpSocket->writeDatagram(contentStr.toUtf8(), QHostAddress(ip), port);

}
//关闭连接
void ServerWidget::on_buttonClose_clicked()
{
    if(udpSocket == NULL){
        return;
    }
    udpSocket->disconnectFromHost();
    udpSocket->close();
}

3、最终实现的效果如下图

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-09-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档