基本流程

简单聊天程序

#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. PHP进程信号处理

    PHP进程信号处理 php有一组进程控制函数PCNTL,使得php能在*nix系统中实现跟c一样的创建子进程.使用exec函数执行程序.处理信号等功能. 注意:pcntl这个扩展仅在cli/cgi模式 ...

  2. Source-Based XSS Test Cases

    Single Reflection Case 01 - Direct URL Injection (no parameter) payload: https://brutelogic.com.br/x ...

  3. Java中字符串相加和字符串常量相加区别

    有一道这样的程序: public class TestStringDemo { public static void main(String[] args) { String s1 = "P ...

  4. 根据Webservice地址,动态传入参数(Webservice代理类)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using Sunlib; ...

  5. 一天一个Linux命令--nmcli

    nmcli命令连接和删除SSID nmcli d wifi                                                                        ...

  6. mstsc远程连接发生身份验证错误要求的函数不受支持

    在win7电脑上使用远程连接连接一台服务器时,出现发生身份验证错误要求的函数不受支持的错误,原因是本地组策略配置错误,如下图: 解决办法: 进入windows命令行模式输入命令: 会弹出本地策略组编辑 ...

  7. RocketMQ知识整理与总结

    1.架构 RocketMQ的master broker与master broker没有任何消息通讯,nameserver之间也同样没有消息通信 MQ历史 由数据结构队列发展而来 MQ使用场景    异 ...

  8. numpy科学计算库的基础用法,完美抽象多维数组(原创)

    #起别名避免重名 import numpy as np #小技巧:print从外往内看==shape从左往右看 if __name__ == "__main__": print(' ...

  9. Python之shutil模块(复制移动文件)

    用python实现将某代码文件复制/移动到指定路径下.场景例如:mv ./xxx/git/project1/test.sh ./xxx/tmp/tmp/1/test.sh (相对路径./xxx/tmp ...

  10. 深度学习识别CIFAR10:pytorch训练LeNet、AlexNet、VGG19实现及比较(二)

    版权声明:本文为博主原创文章,欢迎转载,并请注明出处.联系方式:460356155@qq.com AlexNet在2012年ImageNet图像分类任务竞赛中获得冠军.网络结构如下图所示: 对CIFA ...