版权声明:若无来源注明,Techie亮博客文章均为原创。 转载请以链接形式标明本文标题和地址:
本文标题:QUdpSocket-Qt使用Udp通讯实现服务端和客户端     本文地址:https://www.techieliang.com/2017/12/532/

1. QNetworkDatagram

qt网络报文,可用其建立一个通讯内容包括目标ip、端口号、数据内容。同时接收到的信息也未此类型,可以访问接收数据的长度、发送者的ip及端口等信息

详情请见帮助

QUdpSocket

有Qt提供的udp通讯的类,详细介绍请见官方文档

2. 客户端

注意pro文件要包含QT += network

  1. #include <QHostAddress>
  2. #include <QUdpSocket>
  3. QUdpSocket *m_socket=new QUdpSocket;
  4. m_socket.writeDatagram(msg, QHostAddress::localhost, 8000);

qudpsocket对于发送数据报文提供了三个重载函数:

  1. qint64 writeDatagram(const char *data, qint64 size, const QHostAddress &address, quint16 port)
  2. qint64 writeDatagram(const QNetworkDatagram &datagram)
  3. qint64 writeDatagram(const QByteArray &datagram, const QHostAddress &host, quint16 port)

上面的范例使用的是第三种类型,也可以自行建立QNetworkDatagram对象,修改好内容后直接调用writeDatagram

3. 服务端

服务端与客户端类似,需要先绑定端口“bind”,此函数在QAbstractSocket类中提供

  1. bool bind(const QHostAddress &address, quint16 port = 0, BindMode mode = DefaultForPlatform)
  2. bool bind(quint16 port = 0, BindMode mode = DefaultForPlatform)

具体使用方式:

  1. m_socket = new QUdpSocket;
  2. m_socket->bind(QHostAddress::localhost, 8000);
  3. connect(m_socket, SIGNAL(readyRead()), this, SLOT(receive()));

绑定端口以后,需要将此socket的readyread信号与自定义槽函数连接,当服务端收到消息时会触发此信号。

4. 消息收发

由于udp与tcp不同,不需要三次握手建立连接,所以并不会在连接之后记录当前socket。

发送消息在客户端中已经提供示例

接收消息需要使用Qudpsocket提供以下函数:

  1. qint64 pendingDatagramSize() const
  2. qint64 readDatagram(char *data, qint64 maxSize, QHostAddress *address = Q_NULLPTR, quint16 *port = Q_NULLPTR)
  3. QNetworkDatagram receiveDatagram(qint64 maxSize = -1)

当readyRead信号触发时,可直接通过receiveDatagram函数获取消息报文对象,其内存储消息的发送ip、端口、消息内容等所有信息。

也可以通过pendingDatagramSize判断消息长度,然后通过readDatagram获取消息内容。

在readyRead槽函数中可以先调用QUdpSocket::hasPendingDatagrams判断当前是否有需要读取的消息,若有消息再进行pendingDatagramSize获取需要读取的大小

转载请以链接形式标明本文标题和地址:Techie亮博客 » QUdpSocket-Qt使用Udp通讯实现服务端和客户端

QUdpSocket-Qt使用Udp通讯实现服务端和客户端的更多相关文章

  1. QTcpSocket-Qt使用Tcp通讯实现服务端和客户端

    版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QTcpSocket-Qt使用Tcp通讯实现服务端和客户端     本文地址:https:// ...

  2. go --socket通讯(TCP服务端与客户端的实现)

    这篇文章主要使用Go语言实现一个简单的TCP服务器和客户端.服务器和客户端之间的协议是 ECHO, 这个RFC 862定义的一个简单协议.为什么说这个协议很简单呢, 这是因为服务器只需把收到的客户端的 ...

  3. 【转】TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端)、UDP客户端

    [转]TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端).UDP客户端 目录 说明 TCP/UDP通信主要结构 管理多个Socket的解决方案 框架中TCP部分的使用 框架中UDP ...

  4. Unity使用C#实现简单Scoket连接及服务端与客户端通讯

    简介: 网络编程是个很有意思的事情,偶然翻出来很久之前刚开始看Socket的时候写的一个实例,贴出来吧 Unity中实现简单的Socket连接,c#中提供了丰富的API,直接上代码. 服务端代码: [ ...

  5. 从零开始开发IM(即时通讯)服务端(二)

    好消息:IM1.0.0版本已经上线啦,支持特性: 私聊发送文本/文件 已发送/已送达/已读回执 支持使用ldap登录 支持接入外部的登录认证系统 提供客户端jar包,方便客户端开发 github链接: ...

  6. 基于SignalR的服务端和客户端通讯处理

    SignalR是一个.NET Core/.NET Framework的实时通讯的框架,一般应用在ASP.NET上,当然也可以应用在Winform上实现服务端和客户端的消息通讯,本篇随笔主要基于Sign ...

  7. WCF开发的流程-服务端和客户端之间的通讯(内含demo讲解)

    讲解技术之前,恳请博友让我说几句废话.今天是我第一在博客园发布属于自己原创的博文(如有雷同,那是绝对不可能的事,嘿嘿).之前一直是拜读各位博友的大作,受益匪浅的我在这对博友们说声谢谢,谢谢你们的共享! ...

  8. 采用MQTT协议实现android消息推送(2)MQTT服务端与客户端软件对比、android客户端示列表

    1.服务端软件对比 https://github.com/mqtt/mqtt.github.io/wiki/servers 名称(点名进官网) 特性 简介 收费 支持的客户端语言 IBM MQ 完整的 ...

  9. 一些java考过的测试题和自己制作模拟服务端和客户端

    媒体 1,java环境变量: PATH: .;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;  CLASSPATH: .;%JAVA_HOME%\jre\lib\rt.jar ...

随机推荐

  1. GCC编译器基础入门

    导语 GCC(GNU Compiler Collection,GNU 编译器套件) 是由 GNU 开发的编程语言编译器,支持C.C++.Objective-C.Fortran.Java.Ada和Go语 ...

  2. CTF-安恒19年二月月赛部分writeup

    CTF-安恒19年二月月赛部分writeup MISC1-来玩个游戏吧 题目: 第一关,一眼可以看出是盲文,之前做过类似题目 拿到在线网站解一下 ??41402abc4b2a76b9719d91101 ...

  3. C语言程序设计:现代方法(第2版)第三章全部习题答案

    前言 本人在通过<C语言程序设计:现代方法(第2版)>自学C语言时,发现国内并没有该书完整的课后习题答案,所以就想把自己在学习过程中所做出的答案分享出来,以供大家参考.这些答案是本人自己解 ...

  4. linux通过命令查找大文件

    一:如果linux根分区使用量达到100%,会造成如下现象: root不能登录 系统不能正常启动 二:通过命令查找根分区内的大文件 1.du -sh /* 2>/dev/null | sort ...

  5. 版本控制工具(下)——Git的远程仓库、分支管理与其它操作

    预备知识: SSH协议参考资料:http://blog.csdn.net/vevenlcf/article/details/43273405 图解公钥和私钥:http://blog.csdn.net/ ...

  6. Freemarker入门(一)——入门与基本概述

    1.概述 1.文档 完美的中文文档:http://freemarker.foofun.cn/ 2.是什么 FreeMarker是一个用Java语言编写的模板引擎.它基于模板来生成文本输出.Freema ...

  7. 20155218 《Java程序设计》实验五(网络编程与安全)实验报告

    20155218 <Java程序设计>实验五(网络编程与安全)实验报告 一.实验内容及步骤 (一) 编写MyBC.java实现中缀表达式转后缀表达式的功能 编写MyDC.java实现从上面 ...

  8. 20155315 2016-2017-2 《Java程序设计》第十周学习总结

    学习目标 了解计算机网络基础 掌握Java Socket编程 理解混合密码系统 掌握Java 密码技术相关API的使用 学习资源 Java和Android开发学习指南(第二版)(EPUBIT,,Jav ...

  9. 【原创】Odoo开发文档学习之:ORM API接口(ORM API)(边Google翻译边学习)

    官方ORM API开发文档:https://www.odoo.com/documentation/10.0/reference/orm.html Recordsets(记录集) New in vers ...

  10. [BZOJ1857][SCOI2010]传送带-[三分]

    Description 传送门 Solution 三分套三分.代码简单但是证明苦兮兮.. 假如我们在AB上选了一个点G,求到该点到D的最小时间. 图中b与CD垂直.设目前从G到D所耗时间最短的路径为G ...