Qt实现UDP通信简例
目标
终极目标是完成计网课设:基于P2P的局域网即时通信系统。
然而…第一次接触 Qt,完全没有概念,希望有个尽量简单的例子见识一下 Qt 网络编程的套路。看完参考的例子后学写了一波。
特点
- 只有一边发送、另一边接收,且都在本地
- 没有图形界面,就黑框框
Tips
- Qt 版本:5.8
- .pro 文件里要加一句:
QT += network
,接着一定要 执行qmake - 约定用 2333 号端口(随便啦)
- 测试时要在本机启动两个程序,就把发送端和接收段放在两个工程里,分别置为活动工程、运行,就可以启动两个了
- singals 和 slots 其实就是普通的成员函数,见上面 Qt 信号槽的实现 的链接中带有魔法的宏
bind()
大概是使用那个端口的意思,就从那端口读数据- 一旦端口收到数据,就会
emit
一个叫readyRead()
的信号,然后那些connect()
了readyRead()
的槽(例中的receive()
)就会收到通知(被调用),然后进行相应的操作(函数体)
源码
发送端
main.cpp
#include <QByteArray>
#include <QCoreApplication>
#include <QHostAddress>
#include <QUdpSocket>const quint16 PORT = 2333;int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);QUdpSocket qus;
// qus.bind(QHostAddress("127.0.0.1"), PORT+1);QByteArray msg = "Hello world!";std::cout << "--- Sender ---" << std::endl;for(int i=0; i<100; ++i)qus.writeDatagram(msg, QHostAddress("127.0.0.1"), PORT);return a.exec();
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
接收端
UdpReceiver.h
#ifndef UDPRECEIVER_H
#define UDPRECEIVER_H#include <QObject>
#include <QUdpSocket>class UdpReceiver : public QObject
{Q_OBJECTpublic:UdpReceiver(QObject *p = 0);~UdpReceiver();public slots:void receive();private:QUdpSocket *uSocket;
};#endif // UDPRECEIVER_H
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
UdpReceiver.cpp
#include <QByteArray>
#include <iostream>
#include "UdpReceiver.h"const quint16 PORT = 2333;UdpReceiver::UdpReceiver(QObject *p) :QObject(p)
{uSocket = new QUdpSocket;uSocket->bind(QHostAddress("127.0.0.1"), PORT);connect(uSocket, SIGNAL(readyRead()), this, SLOT(receive()));
}UdpReceiver::~UdpReceiver()
{delete uSocket;
}void UdpReceiver::receive()
{QByteArray ba;while(uSocket->hasPendingDatagrams()){ba.resize(uSocket->pendingDatagramSize());uSocket->readDatagram(ba.data(), ba.size());std::cout << ba.data() << std::endl;}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
main.cpp
#include <QCoreApplication>
#include "udpreceiver.h"
#include <iostream>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);UdpReceiver ur;std::cout << "--- Recevier ---" << std::endl;return a.exec();
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
截图
工程
qmake
效果
Qt实现UDP通信简例相关推荐
- qt 实现UDP通信简单案例
实现效果 实现功能 创建两个界面,可以通过udp进行通信,并显示通信内容. 界面部分由代码实现,并使用qss简单美化. udp通信由创建套接字,绑定端口号,发送和接收数据函数完成. 代码实现 创建第一 ...
- QT TCP/UDP通信
参考:43黑马QT笔记之Qt下Tcp/Udp通信过程_Mango酱的博客-CSDN博客 HTTP与TCP的区别和联系_satellite13的博客-CSDN博客 TCP和UDP的区别: UDP通信 服 ...
- Qt使用UDp通信、套接字socket的成员函数bind()的作用
一. 所谓bind,就是指绑定本地接受端口. 指定ip,是为了分辨多ip主机.在有服务端和客户端的UDP中,bind是服务端调用的函数,绑定的是服务端的IP,假设服务端有多个网卡,即 ...
- Qt中UDP通信的简单示例
udp通信分为发送端和接收端,通信步骤可以分为以下: 接收端: 创建QUdpSocket对象.在.h文件中添加类的前置声明,定义该类的指针,在.cpp的构造函数中定义指向该类的指针. bind().绑 ...
- fleck 客户端_C#中使用Fleck实现WebSocket通信简例
Fleck是一个开源的使用C#封装的WebSocket服务端工具库. 一.服务端搭建 这里选择在.net core 2.1框架下新建了一个控制台程序 在项目里使用NuGet引入Fleck包 NuGet ...
- QT的UDP通信详解
- Qt学习(六):UDP通信
知识点 qt中UDP通信 组播 获取编辑器内容,发送到套接字 完整项目github地址: https://github.com/taw19960426/Qt_study/tree/main/QUdpS ...
- QT学习开发笔记(UDP通信)
UDP 通信 11.3.1 UDP 简介 UDP(User Datagram Protocol 即用户数据报协议)是一个轻量级的,不可靠的,面向数据 报的无连接协议.我们日常生活中使用的 QQ,其聊天 ...
- qt triggered信号_Qt之网络编程UDP通信
点击上方"Qt学视觉",选择"星标"公众号重磅干货,第一时间送达 想要学习的同学们还请认真阅读每篇文章,相信你一定会有所收获 UDP通信概述 UDP(UserD ...
最新文章
- python 如何封装dll_如何为DLL库创建Python包装器
- python 删除list中的第一个元素
- 【技术原创】MailEnable开发指南
- 02.elasticsearch_read_write模型基础
- python中*args和**args的不同
- 《众妙之门——网页排版设计制胜秘诀》——3.4 展现品牌视觉的同时保持网页的可读性...
- html怎么防止表单重复提交,js防止表单重复提交的解决方法
- 前端学习(2575):vue-route使用场景
- logback 配置
- 微服务+异步工作流+ Serverless,Netflix 决定弃用稳定运行 7 年的旧平台
- 【数据结构与算法】浅谈稀疏矩阵
- [Head First设计模式]生活中学设计模式——组合模式
- 写在而立之年到来之前
- 利用javascript写一个石头剪刀布的简易小游戏
- 163企业邮箱申请,163企业邮箱注册方法
- 汉谷拼形是克服“提笔忘字”最犀利的武器
- LCD1602液晶显示屏用51单片机怎么驱动?(详细笔记附设计源码)
- UCOSIII系统任务
- 天猫双11背后的阿里技术
- 给mongodb设置密码
热门文章
- 中国SaaS死或生之三:SaaS SCM能否上演绝地求生?
- 2.LRU算法实现 [C++]
- 第十届蓝桥杯java B组—试题F 特别数的和
- 越不服务器显示异常什么原因,计算机异常问题都有哪些常见类型
- 为什么c语言写程序要挂起,我运行的C语言程序挂起了,应该怎么办?
- java泛型集合_Java泛型集合(Set)
- 数据中心节能改造刻不容缓成本高昂怎么破?
- DL之PerceptronAdalineGD:基于iris莺尾花数据集利用Perceptron感知机和AdalineGD算法实现二分类
- Python编程语言学习:判断变量是否为NONE或False的几种常见写法(if not用法教程)
- AI开发者大会:2020年7月3日09:30--09:50司罗《为商业搭建语言桥梁》