QUdpSocket Class
QUdpSocket类提供一个UDP套接字。
Header: | #include <QUdpSocket> |
qmake: | QT += network |
Inherits: | QAbstractSocket. |
注意:这个类的所有函数都是不可重入的(reentrant)。
公有函数:
QUdpSocket(QObject * parent = 0) |
|
virtual | ~QUdpSocket() |
bool | hasPendingDatagrams() const |
bool |
joinMulticastGroup(const QHostAddress & groupAddress) |
bool |
joinMulticastGroup(const QHostAddress & groupAddress, const QNetworkInterface & iface) |
bool |
leaveMulticastGroup(const QHostAddress & groupAddress) |
bool |
leaveMulticastGroup(const QHostAddress & groupAddress, const QNetworkInterface & iface) |
QNetworkInterface | multicastInterface() const |
qint64 | pendingDatagramSize() const |
qint64 |
readDatagram(char * data, qint64 maxSize, QHostAddress * address = 0, quint16 * port = 0) |
void |
setMulticastInterface(const QNetworkInterface & iface) |
qint64 |
writeDatagram(const char * data, qint64 size, const QHostAddress & address, quint16 port) |
qint64 |
writeDatagram(const QByteArray & datagram, const QHostAddress & host, quint16 port) |
37公有函数继承自QAbstractSocket
33公有函数继承自QIODevice
31公有函数继承自QObject
其他的继承的成员:
- 1 property inherited from QObject
- 1 public slot inherited from QObject
- 6 signals inherited from QAbstractSocket
- 4 signals inherited from QIODevice
- 2 signals inherited from QObject
- 1 public variable inherited from QObject
- 10 static public members inherited from QObject
- 10 protected functions inherited from QAbstractSocket
- 5 protected functions inherited from QIODevice
- 9 protected functions inherited from QObject
- 2 protected variables inherited from QObject
QUdpSocket类提供一个UDP套接字。
UDP(用户数据报协议)是一个轻量级的,不可靠的,面向数据包的无连接的协议。当可靠性不重要的时候,可以使用UDP。QUdpSocket是QAbstractSocket的一个子类,可以用来收发数据报。
这个类最多的用途就是使用bind()绑定一个地址和端口,然后调用writeDatagram()和readDatagram()来传递数据。如果你想用标准QIODevice类的方法read(),readLine(),write()等,你必须首先直接连接到套接字,通过调用connectToHost()函数连接一个同等的用户(peer)。
每次有数据报写到网络中时,套接字发射bytesWritten()信号。如果你只是想发送数据报,你不需要调用bind()函数。
当数据报到达的时候,readyRead()信号被发射。这样,hasPendingDatagrams()返回true。调用pendingDatagramSize()来获得第一个接收到的数据报的大小,使用readDatagram()来读取数据报。
注意:当你接收到readyRead()信号时,到达的数据报必须被读取,否则,信号不会发射给下个数据报。
示例:
void Server::initSocket()
{
udpSocket = new QUdpSocket(this);
udpSocket->bind(QHostAddress::LocalHost, 7755); connect(udpSocket, SIGNAL(readyRead()),
this, SLOT(readPendingDatagrams()));
} void Server::readPendingDatagrams()
{
while (udpSocket->hasPendingDatagrams()) {
QByteArray datagram;
datagram.resize(udpSocket->pendingDatagramSize());
QHostAddress sender;
quint16 senderPort; udpSocket->readDatagram(datagram.data(), datagram.size(),
&sender, &senderPort); processTheDatagram(datagram);
}
}
QUdpSocket also supports UDP multicast. Use joinMulticastGroup()
and leaveMulticastGroup()
to control group membership,
and QAbstractSocket::MulticastTtlOption andQAbstractSocket::MulticastLoopbackOption to
set the TTL and loopback socket options. UsesetMulticastInterface()
to control the outgoing interface for multicast datagrams, andmulticastInterface()
to query it.
使用UdpSocket,你可以使用connectToHost()建立一个到UDP服务器的虚拟连接,而且不用指定每条报文的接受者就可以使用read()和write()来交换报文。
The Broadcast Sender, Broadcast
Receiver, Multicast Sender, and Multicast
Receiver examples illustrate how to use QUdpSocket in applications.
See also QTcpSocket.
成员函数文档:
QUdpSocket::QUdpSocket(QObject * parent =
0)
创建一个QUdpSocket对象。
parent继承自QObject的构造函数。
参考socketType()。
QUdpSocket::~QUdpSocket() [virtual]
销毁套接字,如有必要,关闭连接。
参考close()。
bool QUdpSocket::hasPendingDatagrams() const
如果至少有一个报文等到被读,返回true;否则,返回false。
参考pendingDatagramSize()和readDatagram()。
bool QUdpSocket::joinMulticastGroup(const QHostAddress & groupAddress)
Joins the multicast group specified by groupAddress on the default interface chosen by the operating system. The socket must be in BoundState,
otherwise an error occurs.
Note that if you are attempting to join an IPv4 group, your socket must not be bound using IPv6 (or in dual mode, using QHostAddress::Any).
You must use QHostAddress::AnyIPv4 instead.
This function returns true if successful; otherwise it returns false and
sets the socket error accordingly.
This function was introduced in Qt 4.8.
See also leaveMulticastGroup().
bool QUdpSocket::joinMulticastGroup(const QHostAddress & groupAddress,
const QNetworkInterface & iface)
This is an overloaded function.
Joins the multicast group address groupAddress on the interface iface.
This function was introduced in Qt 4.8.
See also leaveMulticastGroup().
bool QUdpSocket::leaveMulticastGroup(const QHostAddress & groupAddress)
Leaves the multicast group specified by groupAddress on the default interface chosen by the operating system. The socket must be in BoundState,
otherwise an error occurs.
This function returns true if successful; otherwise it returns false and
sets the socket error accordingly.
This function was introduced in Qt 4.8.
See also joinMulticastGroup().
bool QUdpSocket::leaveMulticastGroup(const QHostAddress & groupAddress,
const QNetworkInterface & iface)
This is an overloaded function.
Leaves the multicast group specified by groupAddress on the interface iface.
This function was introduced in Qt 4.8.
See also joinMulticastGroup().
QNetworkInterface QUdpSocket::multicastInterface()
const
Returns the interface for the outgoing interface for multicast datagrams. This corresponds to the IP_MULTICAST_IF socket option for IPv4 sockets and the IPV6_MULTICAST_IF socket option for IPv6 sockets. If no interface has been previously set, this function
returns an invalid QNetworkInterface. The socket must be in BoundState,
otherwise an invalid QNetworkInterface is returned.
This function was introduced in Qt 4.8.
See also setMulticastInterface().
qint64 QUdpSocket::pendingDatagramSize() const
返回第一个待定的报文的大小。如果没有报文待定,返回-1.
参考hasPendingDatagrams()readDatagram()。
qint64 QUdpSocket::readDatagram(char * data, qint64 maxSize, QHostAddress* address =
0, quint16 * port = 0)
接收一个不超过maxsize字节的报文,存到data中。发送者的主机地址和端口号存进*address和*port中(除非指针是0)
返回数据报成功的大小;否则返回-1.
如果maxsize太小,剩下的报文会丢失。为避免数据的丢失,在试图读取之前,调用pendingDatagramSize()来决定待定数据报的大小。如果maxsize是0,数据报将被丢弃。
参考writeDatagram(), hasPendingDatagrams(),
and pendingDatagramSize().
void QUdpSocket::setMulticastInterface(const QNetworkInterface & iface)
Sets the outgoing interface for multicast datagrams to the interface iface. This corresponds to the IP_MULTICAST_IF socket option for IPv4 sockets and the IPV6_MULTICAST_IF socket option for IPv6 sockets. The socket
must be in BoundState, otherwise this function does nothing.
This function was introduced in Qt 4.8.
See also multicastInterface(), joinMulticastGroup(),
and leaveMulticastGroup().
qint64 QUdpSocket::writeDatagram(const char * data, qint64 size,
constQHostAddress & address, quint16 port)
发送size字节大小的数据报给address地址和port端口的主机。返回成功发送的字节数,否则返回-1.
数据报总是被写成一块。数据报的最大大小是高度平台相关的,但是可以低至8192字节。如果报文太大,这个函数会返回-1并且error()会返回DatagramTooLargeError。
发送数据报大于512个字节是不鼓励的,即使成功发送,它们在到达目的地之前也可能被IP层分裂。
警告:在一个连接的UDP套接字上调用这个函数可能产生一个错误,导致没有数据包被发送。如果你使用了连接的套接字,使用write()来发送数据报。
参考readDatagram()
and write().
qint64 QUdpSocket::writeDatagram(const QByteArray & datagram,
constQHostAddress & host, quint16 port)
这是一个重载函数。
发送datagram数据报给地址是host,端口是port的主机。
QUdpSocket Class的更多相关文章
- Qt中QUdpSocket序列化问题
写了一个小的Qt网络程序,很简单,发送的网络消息除了字符串还有一个结构体.很简单的想到用memcpy()函数来将数据序列化为BYTE数组从而实现网络传输. 序列化是Java中一个概念,C中并没有,C+ ...
- 5.关于QT中的网络编程,QTcpSocket,QUdpSocket
1 新建一个项目:TCPServer.pro A 修改TCPServer.pro,注意:如果是想使用网络库,需要加上network SOURCES += \ TcpServer.cpp \ T ...
- QT 使用QUdpSocket QUdpServer UDP 建立客户端与服务器端
1. 模拟天气监控,每隔两秒从Server发送天气信息到Client. 2. 示例代码 --------------------------- Server 端 ------------------- ...
- C/C++学习)22.QTcpServer、QTcpSocket、QUdpSocket使用
一.TCP/UDP通信在Qt中的实现过程: 废话不说,首先下面是Qt中TCP/UDP的实现图解: 1.Qt下TCP通信详解: 针对上图进行简单的说明: QTcpServer用来创建服务 ...
- QT下UDP套接字通信——QUdpSocket 简单使用
QT下UDP套接字通信--QUdpSocket QUdpSocket类提供一个UDP套接字. UDP(用户数据报协议)是一种轻量级.不可靠.面向数据报.无连接的协议.它可以在可靠性不重要的情况下使用. ...
- Qt下的udp编程
项目需要一个基于udp的客户端, 看着Qt是有个QUdpSocket的类的, 但自带的例子和类的说明都没咋说明白: 怎么用一个QUdpSocket既当发送端, 又当接收端? 谷歌一顿后, 发现很多老内 ...
- Qt on Android 核心编程
Qt on Android 核心编程(最好看的Qt编程书!CSDN博主foruok倾力奉献!) 安晓辉 著 ISBN 978-7-121-24457-5 2015年1月出版 定价:65.00元 4 ...
- Qt 多线程和网络编程学习
一,Qt多线程类学习 QThread类,开始一个新的线程就是开始执行重新实现QThread::run(),run()是默认现实调用exec(),QThread::start()开始线程的执行,run( ...
- QT UDP聊天小程序
利用QT的UDP技术,实现两个QT程序之间的聊天程序. #ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include < ...
随机推荐
- 【转载】laravel的MVC
http://my.oschina.net/tongjh/blog/194231 http://baike.baidu.com/view/1020297.htm 一.laravel路由(应用中的大多数 ...
- css1-颜色和长度
<!DOCTYPE html>CSS1-颜色和长度 <style>div{ /*颜色*/ color:#f00; /*前景色*/ background:#00f; /*背景色* ...
- java面试大全
JAVA相关基础知识1.面向对象的特征有哪些方面 1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时 ...
- 数组,集合 转成DataTable 方法
public static DataTable ToDataTable(IList p_List) { DataTable _DataTable = new DataTable(); if (p_Li ...
- WP8.1 页面导航 缓存问题
最近开始学习wp8.1开发,在页面的导航学习时发现了一点问题,即当使用Frame.Navigate()方法进行页面的跳转时,每次都会重新实例化一个页面.而在新的页面采用Frame.GoBack()或者 ...
- Unity-碰撞
固定位置和角度 选择项目视图中的 Prefab. 打开检视面板中的 Rigidbody 标签可以看到 Constraints 项. 点击左边的三角形图标, 下面会进一步显示 Freeze Positi ...
- POJ 2195 Going Home / HDU 1533(最小费用最大流模板)
题目大意: 有一个最大是100 * 100 的网格图,上面有 s 个 房子和人,人每移动一个格子花费1的代价,求最小代价让所有的人都进入一个房子.每个房子只能进入一个人. 算法讨论: 注意是KM 和 ...
- leetcode_最长公共前缀
题目:Write a function to find the longest common prefix string amongst an array of strings. 题解:给出的函数为: ...
- UIScrollView和UIPageControl学习使用
# UIScrollView和UIPageControl # 概要 对于同一个页面需要展示很多图片信息.子视图等的这样的需求,我们可以采用控件UIScrollVIew,与之常常一起使用的控件是UIPa ...
- shell date格式化输出
1- echo `date "+%Y-%m-%d %H:%M:%S"` 2014-11-13 15:06:26 2- echo `date "+%y-%m-%d %H ...