(十六)qt-udp,组播
基本流程


简单聊天程序
#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,组播的更多相关文章
- QT Udp组播(穿透)
http://blog.csdn.net/victoryknight/article/details/7814243 主题 UDPQt路由器 局域网内的两台机器如果隔有路由器,那么这两台机器之间不 ...
- Android设备一对多录屏直播--(UDP组播连接,Tcp传输)
原文:https://blog.csdn.net/sunmmer123/article/details/82734245 近期需要学习流媒体知识,做一个Android设备相互投屏Demo,因此找到了这 ...
- ffmpeg笔记——UDP组播接收总结
ffmpeg在avformat_open_input里面已经实现了UDP的协议,所以只需要设置好参数,将url传递进去就可以了. 和打开文件的方式基本一样: 01 AVCodecContext *pV ...
- C# 使用UDP组播实现局域网桌面共享
最近需要在产品中加入桌面共享的功能,暂时不用实现远程控制:参考了园子里的一些文章,加入了一些自己的修改. 需求:将一台机器的桌面通过网络显示到多个客户端的屏幕上,显示内容可能为PPT,Word文档之类 ...
- Android上UDP组播无法接收数据的问题
最近,想做一个跨平台的局域网的文件传输软件,思路是组播设备信息,TCP连接传输文件.于是进行了一次简单的UDP组播测试,发现Android对于UDP组播接收数据的支持即极为有限. 部分代码如下 pac ...
- 【网络开发】UDP组播接收端解析
UDP组播接收端解析 网络中的一台主机如果希望能够接收到来自网络中其它主机发往某一个组播组的数据报,那么这么主机必须先加入该组播组,然后就可以从组地址接收数据包.在广域网中,还涉及到路由器支持组播路由 ...
- 多网卡情况下接收udp组播
多网卡下接收udp组播 往往会接收失败 因为用错了网卡 例如我想要接收2网段 其他电脑出的udp组播 我电脑有有线网和wifi在window下可以这样 route add 230.0.0.1 mas ...
- (转)C# 使用UDP组播实现局域网桌面共享
转:http://www.cnblogs.com/mobwiz/p/3715743.html 最近需要在产品中加入桌面共享的功能,暂时不用实现远程控制:参考了园子里的一些文章,加入了一些自己的修改. ...
- QT的UDP组播技术
一 UDP介绍 UDP是一种简单轻量级的传输层协议,提供无连接的,不可靠的报文传输.适合下面4种情况: 网络数据大多为短消息. 拥有大量客户端. 对数据安全性无特殊要求 网络负担非常重,但对响应速度要 ...
- 调皮的udp组播技术
2017年本科毕业,经历过千辛万苦的找工作之后,我进入了现在的这家公司.虽是职场小白,但励志成为IT界的一股清流(毕竟开发的妹子少,哈哈).因为公司的业务需要,我负责的部分是利用组播技术实现OSG模型 ...
随机推荐
- Vue slot插槽
插槽用于内容分发,存在于子组件之中. 插槽作用域 父级组件作用域为父级,子级组件作用域为子级,在哪定义的作用域就在哪. 子组件之间的内容是在父级作用域的,无法直接访问子组件里面的数据. 插槽元素 &l ...
- H5、C3、ES6的新特性
H5的新特性 1.语义化标签 有利于SEO,有助于爬虫抓取更多的有效信息,爬虫是依赖于标签来确定上下文和各个关键字的权重. 语义化的HTML在没有CSS的情况下也能呈现较好的内容结构与代码结构 方便其 ...
- 弹性布局 - flex对齐
flex对齐 flex对齐方式与主轴和交叉轴所在的方向有关,而flex-direction是控制方向的. 主轴 justify-content justify-content对齐方式共有5种对齐方 ...
- Android 系统服务的获取与创建
在Android系统中,有一群很厉害的“家伙”,如果把Android系统比喻成一个大帮派,那么这群“家伙”的地位就像那各个分堂的堂主一样,所有的应用就像是各个小马哥,他们要做什么事情,都要堂主审批,审 ...
- 工具资源系列之给虚拟机装个ubantu
前文我们已经讲解了如何在 mac 系统上安装虚拟机软件,这节我们接着讲解如何利用虚拟机安装 Ubuntu 镜像. 安装镜像的大致步骤基本相同,只不过是配置项略显不同而已,如果需要安装其他系统镜像,请参 ...
- vue(3)—— vue的全局组件、局部组件
组件 vue有局部组件和全局组件,这个组件后期用的会比较多,也是非常重要的 局部组件 template与components属性结合使用挂载 其中 Vmain.Vheader.Vleft.Vconte ...
- 如何取消Microsoft账户登录电脑
手贱用Microsoft账户登录了一下笔记本里面的日历,TNND微软直接就把你电脑的登录账户直接改成了微软账户,花了1个小时才搞回去. 步骤如下: 0--脑残微软的设计,点了下日历,弹出下面这个,绝对 ...
- windows server 2008 R2 Enterprise 间实时同步之FreeFileSync 部署过程
WindowsServer间实时同步之FreeFileSync 部署过程 1. 实验主机信息 IP 操作系统 源目录 目标目录 10.155.0.80 Windows Server 2008 R2 D ...
- 你的知识需要管理PKM
有一段时间没有更新技术博客了~,大脑中总感觉有点东西要写,却不知道从哪里开始写~至少写点东西,也算是一个阶段的成长.反思~ 学习(充电过程).工作(知识变现过程)不是简单重复,永远都是最值得去反思.玩 ...
- 单向链表的Java实现
package testOffer.linkedList; import org.w3c.dom.Node; public class SingleLinkedList { //测试用例 public ...