(十六)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模型 ...
随机推荐
- Django 无名参数与有名参数
无名参数 配置 urls ,我们需要导入 url 模块,以()定义一个无名的变量 from django.contrib import admin from django.urls import pa ...
- Spring boot 入门(四):集成 Shiro 实现登陆认证和权限管理
本文是接着上篇博客写的:Spring boot 入门(三):SpringBoot 集成结合 AdminLTE(Freemarker),利用 generate 自动生成代码,利用 DataTable 和 ...
- loj#6041. 「雅礼集训 2017 Day7」事情的相似度(SAM set启发式合并 二维数点)
题意 题目链接 Sol 只会后缀数组+暴躁莫队套set\(n \sqrt{n} \log n\)但绝对跑不过去. 正解是SAM + set启发式合并 + 二维数点/ SAM + LCT 但是我只会第一 ...
- SAP MM ME29N 试图取消审批报错 - Document has already been outputed(function not possible) -
SAP MM ME29N 试图取消审批报错 - Document has already been outputed(function not possible) - 今天收到用户的一个问题,说他试图 ...
- 基于Odoo框架的开源在线客服系统
cs_base 开源客服系统,基于 Odoo 的客服模块 cs_base 是在强大的 Odoo 框架的基础上实现的一个在线客服应用 基础模块包含完整的 Web 在线客服的接入,坐席管理等,通过扩展可方 ...
- Dynamics 365-为什么查到的Record的Id是Guid初始值
通过代码查询CRM数据,这个是开发经常会碰到的情况,获取返回的EntityCollection之后,我们会拿Entity.Id做进一步操作.笔者最近碰到的情况,是Entity.Id是个初始值.先上一段 ...
- wxpython 支持python语法高亮的自定义文本框控件的代码
在研发闲暇时间,把开发过程中比较重要的一些代码做个珍藏,下面的代码内容是关于wxpython 支持python语法高亮的自定义文本框控件的代码,应该是对大家也有用. import keywordimp ...
- WPF软件开发系统之五——展会展厅触摸屏企业产品宣传展示系统
本系统开发背景:上海展会多点触摸大屏(60寸以上)上互动展示. 功能包括:企业背景.产品.合作伙伴.所获荣誉等以图片.文字.视频多媒体的方式呈块状显示,亮点功能为支持多点操作去旋转.缩放.拖拽呈现各种 ...
- xtrabackup备份mysql数据库方法
1.安装 xtrabackup 工具包 下载percona yum源 https://www.percona.com/redir/downloads/percona-release/redhat/pe ...
- Oracle知识点总结2
1.聚合函数:也叫分组函数. 常用聚合函数:返回的都是NUMBER类型的值. 注:避免使用 COUNT(*) ,而使用 COUNT(ROWID) 2.分组统计:group by 字段名 having ...