基本流程

简单聊天程序

#include "server.h"
#include <QApplication>
#include "client.h" int main(int argc, char *argv[])
{
QApplication a(argc, argv);
server w;
w.show(); Client c;
c.setWindowTitle("client");
c.show(); return a.exec();
}

main.cpp

#include "server.h"
#include "ui_server.h" server::server(QWidget *parent) :
QWidget(parent),
ui(new Ui::server)
{
ui->setupUi(this);
ui->sip_port->setText("");
ui->cip_port->setText("");
ui->cip_lineEdit->setText("127.0.0.1");
udp1 = new QUdpSocket(this); udp1->bind(ui->sip_port->text().toInt());
// send msg
connect(ui->send, &QPushButton::clicked, this, [=](){
udp1->writeDatagram(ui->msg->toPlainText().toUtf8(),QHostAddress(ui->cip_lineEdit->text()),ui->cip_port->text().toInt());
ui->log->append("Me say: " + ui->msg->toPlainText());
ui->msg->clear();
});
// read msg
connect(udp1, &QUdpSocket::readyRead, this, [=](){
qint64 size = udp1->pendingDatagramSize();
QByteArray array(size,);
udp1->readDatagram(array.data(),size);
ui->log->append(array);
});
} server::~server()
{
delete ui;
}

server.cpp

#ifndef SERVER_H
#define SERVER_H #include <QWidget>
#include <QUdpSocket> namespace Ui {
class server;
} class server : public QWidget
{
Q_OBJECT public:
explicit server(QWidget *parent = );
~server(); private:
Ui::server *ui;
QUdpSocket* udp1;
}; #endif // SERVER_H

server.h

#include "client.h"
#include "ui_client.h" Client::Client(QWidget *parent) :
QWidget(parent),
ui(new Ui::Client)
{
ui->setupUi(this);
ui->sip_port->setText("");
ui->cip_port->setText("");
ui->sip_lineEdit->setText("127.0.0.1");
udp2 = new QUdpSocket(this); udp2->bind(ui->cip_port->text().toInt());
// send msg
connect(ui->send, &QPushButton::clicked, this, [=](){
udp2->writeDatagram(ui->msg->toPlainText().toUtf8(),QHostAddress(ui->sip_lineEdit->text()),ui->sip_port->text().toInt());
ui->log->append("Me say: " + ui->msg->toPlainText());
ui->msg->clear();
});
// read msg
connect(udp2, &QUdpSocket::readyRead, this, [=](){
qint64 size = udp2->pendingDatagramSize();
QByteArray array(size,);
udp2->readDatagram(array.data(),size);
ui->log->append(array);
});
} Client::~Client()
{
delete ui;
}

client.cpp

#ifndef CLIENT_H
#define CLIENT_H #include <QWidget>
#include <QUdpSocket>
namespace Ui {
class Client;
} class Client : public QWidget
{
Q_OBJECT public:
explicit Client(QWidget *parent = );
~Client(); private:
Ui::Client *ui;
QUdpSocket* udp2;
}; #endif // CLIENT_H

client.h

组播

#include "client.h"
#include "ui_client.h" Client::Client(QWidget *parent) :
QWidget(parent),
ui(new Ui::Client)
{
ui->setupUi(this);
ui->sip_port->setText("");
ui->cip_port->setText("");
ui->sip_lineEdit->setText("127.0.0.1");
udp2 = new QUdpSocket(this); // if you want to receive must bind port
//udp2->bind(ui->cip_port->text().toInt());
udp2->bind(QHostAddress::AnyIPv4,ui->cip_port->text().toInt());
// 加入到组播的组中
udp2->joinMulticastGroup(QHostAddress("244.0.0.10"));
// send msg
connect(ui->send, &QPushButton::clicked, this, [=](){
udp2->writeDatagram(ui->msg->toPlainText().toUtf8(),QHostAddress(ui->sip_lineEdit->text()),ui->sip_port->text().toInt());
ui->log->append("Me say: " + ui->msg->toPlainText());
ui->msg->clear();
});
// read msg
connect(udp2, &QUdpSocket::readyRead, this, [=](){
qint64 size = udp2->pendingDatagramSize();
QByteArray array(size,);
udp2->readDatagram(array.data(),size);
ui->log->append(array);
});
} Client::~Client()
{
delete ui;
}

client.cpp

#include "server.h"
#include "ui_server.h" server::server(QWidget *parent) :
QWidget(parent),
ui(new Ui::server)
{
ui->setupUi(this);
ui->sip_port->setText("");
ui->cip_port->setText("");
ui->cip_lineEdit->setText("127.0.0.1");
udp1 = new QUdpSocket(this); udp1->bind(ui->sip_port->text().toInt());
// send msg
connect(ui->send, &QPushButton::clicked, this, [=](){
udp1->writeDatagram(ui->msg->toPlainText().toUtf8(),QHostAddress("240.0.0.10"),ui->cip_port->text().toInt());
ui->log->append("Me say: " + ui->msg->toPlainText());
ui->msg->clear();
});
// read msg
connect(udp1, &QUdpSocket::readyRead, this, [=](){
qint64 size = udp1->pendingDatagramSize();
QByteArray array(size,);
udp1->readDatagram(array.data(),size);
ui->log->append(array);
});
} server::~server()
{
delete ui;
}

组播server.cpp

#include "server.h"
#include "ui_server.h" server::server(QWidget *parent) :
QWidget(parent),
ui(new Ui::server)
{
ui->setupUi(this);
ui->sip_port->setText("");
ui->cip_port->setText("");
ui->cip_lineEdit->setText("127.0.0.1");
udp1 = new QUdpSocket(this); udp1->bind(ui->sip_port->text().toInt());
// send msg
connect(ui->send, &QPushButton::clicked, this, [=](){
udp1->writeDatagram(ui->msg->toPlainText().toUtf8(),QHostAddress("255.255.255.255"),ui->cip_port->text().toInt());
ui->log->append("Me say: " + ui->msg->toPlainText());
ui->msg->clear();
});
// read msg
connect(udp1, &QUdpSocket::readyRead, this, [=](){
qint64 size = udp1->pendingDatagramSize();
QByteArray array(size,);
udp1->readDatagram(array.data(),size);
ui->log->append(array);
});
} server::~server()
{
delete ui;
}

广播server.cpp

(十六)qt-udp,组播的更多相关文章

  1. QT Udp组播(穿透)

      http://blog.csdn.net/victoryknight/article/details/7814243 主题 UDPQt路由器 局域网内的两台机器如果隔有路由器,那么这两台机器之间不 ...

  2. Android设备一对多录屏直播--(UDP组播连接,Tcp传输)

    原文:https://blog.csdn.net/sunmmer123/article/details/82734245 近期需要学习流媒体知识,做一个Android设备相互投屏Demo,因此找到了这 ...

  3. ffmpeg笔记——UDP组播接收总结

    ffmpeg在avformat_open_input里面已经实现了UDP的协议,所以只需要设置好参数,将url传递进去就可以了. 和打开文件的方式基本一样: 01 AVCodecContext *pV ...

  4. C# 使用UDP组播实现局域网桌面共享

    最近需要在产品中加入桌面共享的功能,暂时不用实现远程控制:参考了园子里的一些文章,加入了一些自己的修改. 需求:将一台机器的桌面通过网络显示到多个客户端的屏幕上,显示内容可能为PPT,Word文档之类 ...

  5. Android上UDP组播无法接收数据的问题

    最近,想做一个跨平台的局域网的文件传输软件,思路是组播设备信息,TCP连接传输文件.于是进行了一次简单的UDP组播测试,发现Android对于UDP组播接收数据的支持即极为有限. 部分代码如下 pac ...

  6. 【网络开发】UDP组播接收端解析

    UDP组播接收端解析 网络中的一台主机如果希望能够接收到来自网络中其它主机发往某一个组播组的数据报,那么这么主机必须先加入该组播组,然后就可以从组地址接收数据包.在广域网中,还涉及到路由器支持组播路由 ...

  7. 多网卡情况下接收udp组播

    多网卡下接收udp组播 往往会接收失败 因为用错了网卡 例如我想要接收2网段 其他电脑出的udp组播  我电脑有有线网和wifi在window下可以这样 route add 230.0.0.1 mas ...

  8. (转)C# 使用UDP组播实现局域网桌面共享

    转:http://www.cnblogs.com/mobwiz/p/3715743.html 最近需要在产品中加入桌面共享的功能,暂时不用实现远程控制:参考了园子里的一些文章,加入了一些自己的修改. ...

  9. QT的UDP组播技术

    一 UDP介绍 UDP是一种简单轻量级的传输层协议,提供无连接的,不可靠的报文传输.适合下面4种情况: 网络数据大多为短消息. 拥有大量客户端. 对数据安全性无特殊要求 网络负担非常重,但对响应速度要 ...

  10. 调皮的udp组播技术

    2017年本科毕业,经历过千辛万苦的找工作之后,我进入了现在的这家公司.虽是职场小白,但励志成为IT界的一股清流(毕竟开发的妹子少,哈哈).因为公司的业务需要,我负责的部分是利用组播技术实现OSG模型 ...

随机推荐

  1. javascript 函数后面有多个小括号f( )( )( )...

    有时我们看见js函数后面跟着多个小括号是什么意思?f( )( )( )... f()执行f函数,返回子函数 f()()执行子函数,返回孙函数 f()()()执行孙函数,返回重孙函数 ... ... 但 ...

  2. 【Android】用Cubism 2制作自己的Live2D——软件的安装与破解!

    前言- 上文我们简单的了解了Cubism的情况,但是Cubism 2.X安装好以后如果不进行破解只能使用Free版本,这是我们接受不了的,我们是专业的.是来学习的,怎么能不用Pro版本呢?所以话不多说 ...

  3. 通过maven profile 打包指定环境配置

    背景 最近换了个新公司接手了一个老项目,然后比较坑的是这个公司的项目都没有没有做多环境打包配置,每次发布一个环境都要手动的去修改配置文件.今天正好有空就来配置下. 解决这个问题的方式有很多,我这里挑选 ...

  4. <自动化测试方案_8>第八章、手机端UI自动化测试

    第八章.手机端UI自动化测试 (一)APP测试分类 1,原生APP:Native页面是使用原生系统内核的,相当于直接在系统上操作 2,H5APP:先调用系统的浏览器内核,相当于是在网页中进行操作,较原 ...

  5. 深入浅出KNN算法(二) sklearn KNN实践

    姊妹篇: 深入浅出KNN算法(一) 原理介绍 上次介绍了KNN的基本原理,以及KNN的几个窍门,这次就来用sklearn实践一下KNN算法. 一.Skelarn KNN参数概述 要使用sklearnK ...

  6. vue 导出xlsx表功能

    详细步骤: 1.需要安装三个依赖: npm install -S file-saver xlsx npm install -D script-loader 两个命令行包含三个依赖. 2.项目中src下 ...

  7. 阿里云CentOS安装PostgreSQL

    在PostgreSQL官方文档:https://www.postgresql.org/download/linux/redhat/ 有选项和说明 1.检查有没安装:rpg -ga | grep pos ...

  8. WebApi 身份认证解决方案:Basic基础认证

    前言:最近,讨论到数据库安全的问题,于是就引出了WebApi服务没有加任何验证的问题.也就是说,任何人只要知道了接口的url,都能够模拟http请求去访问我们的服务接口,从而去增删改查数据库,这后果想 ...

  9. eclipse 使用Git教程

    做一夜搬运工: https://www.cnblogs.com/heal/p/6427402.html https://blog.csdn.net/fan510988896/article/detai ...

  10. Vue的安装及使用快速入门

    一.安装vue 1.安装node.js,安装完node.js之后,npm也会自动安装 查询是否安装成功的命令: node -v npm -v 2.全局安装脚手架工具vue-cli,命令如下: npm ...