目标

终极目标是完成计网课设:基于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通信简例相关推荐

  1. qt 实现UDP通信简单案例

    实现效果 实现功能 创建两个界面,可以通过udp进行通信,并显示通信内容. 界面部分由代码实现,并使用qss简单美化. udp通信由创建套接字,绑定端口号,发送和接收数据函数完成. 代码实现 创建第一 ...

  2. QT TCP/UDP通信

    参考:43黑马QT笔记之Qt下Tcp/Udp通信过程_Mango酱的博客-CSDN博客 HTTP与TCP的区别和联系_satellite13的博客-CSDN博客 TCP和UDP的区别: UDP通信 服 ...

  3. Qt使用UDp通信、套接字socket的成员函数bind()的作用

    一. 所谓bind,就是指绑定本地接受端口.          指定ip,是为了分辨多ip主机.在有服务端和客户端的UDP中,bind是服务端调用的函数,绑定的是服务端的IP,假设服务端有多个网卡,即 ...

  4. Qt中UDP通信的简单示例

    udp通信分为发送端和接收端,通信步骤可以分为以下: 接收端: 创建QUdpSocket对象.在.h文件中添加类的前置声明,定义该类的指针,在.cpp的构造函数中定义指向该类的指针. bind().绑 ...

  5. fleck 客户端_C#中使用Fleck实现WebSocket通信简例

    Fleck是一个开源的使用C#封装的WebSocket服务端工具库. 一.服务端搭建 这里选择在.net core 2.1框架下新建了一个控制台程序 在项目里使用NuGet引入Fleck包 NuGet ...

  6. QT的UDP通信详解

  7. Qt学习(六):UDP通信

    知识点 qt中UDP通信 组播 获取编辑器内容,发送到套接字 完整项目github地址: https://github.com/taw19960426/Qt_study/tree/main/QUdpS ...

  8. QT学习开发笔记(UDP通信)

    UDP 通信 11.3.1 UDP 简介 UDP(User Datagram Protocol 即用户数据报协议)是一个轻量级的,不可靠的,面向数据 报的无连接协议.我们日常生活中使用的 QQ,其聊天 ...

  9. qt triggered信号_Qt之网络编程UDP通信

    点击上方"Qt学视觉",选择"星标"公众号重磅干货,第一时间送达 想要学习的同学们还请认真阅读每篇文章,相信你一定会有所收获 UDP通信概述 UDP(UserD ...

最新文章

  1. python 如何封装dll_如何为DLL库创建Python包装器
  2. python 删除list中的第一个元素
  3. 【技术原创】MailEnable开发指南
  4. 02.elasticsearch_read_write模型基础
  5. python中*args和**args的不同
  6. 《众妙之门——网页排版设计制胜秘诀》——3.4 展现品牌视觉的同时保持网页的可读性...
  7. html怎么防止表单重复提交,js防止表单重复提交的解决方法
  8. 前端学习(2575):vue-route使用场景
  9. logback 配置
  10. 微服务+异步工作流+ Serverless,Netflix 决定弃用稳定运行 7 年的旧平台
  11. 【数据结构与算法】浅谈稀疏矩阵
  12. [Head First设计模式]生活中学设计模式——组合模式
  13. 写在而立之年到来之前
  14. 利用javascript写一个石头剪刀布的简易小游戏
  15. 163企业邮箱申请,163企业邮箱注册方法
  16. 汉谷拼形是克服“提笔忘字”最犀利的武器
  17. LCD1602液晶显示屏用51单片机怎么驱动?(详细笔记附设计源码)
  18. UCOSIII系统任务
  19. 天猫双11背后的阿里技术
  20. 给mongodb设置密码

热门文章

  1. 中国SaaS死或生之三:SaaS SCM能否上演绝地求生?
  2. 2.LRU算法实现 [C++]
  3. 第十届蓝桥杯java B组—试题F 特别数的和
  4. 越不服务器显示异常什么原因,计算机异常问题都有哪些常见类型
  5. 为什么c语言写程序要挂起,我运行的C语言程序挂起了,应该怎么办?
  6. java泛型集合_Java泛型集合(Set)
  7. 数据中心节能改造刻不容缓成本高昂怎么破?
  8. DL之PerceptronAdalineGD:基于iris莺尾花数据集利用Perceptron感知机和AdalineGD算法实现二分类
  9. Python编程语言学习:判断变量是否为NONE或False的几种常见写法(if not用法教程)
  10. AI开发者大会:2020年7月3日09:30--09:50司罗《为商业搭建语言桥梁》