StupidBeauty
Read times:1540Posted at:Fri Nov 25 01:32:11 2011 - no title specified

Qt5.7文档翻译:QUdpSocket类,QUdpSocket Class

QUdpSocket 类,提供了 UDP套接字功能 详细说明……

头文件:

#include <QUdpSocket>

qmake指令

QT += network

继承

QAbstractSocket

注意 这个类中的所有函数都是 可重入的

详细说明

QUdpSocket 类,提供了 UDP套接字功能

用户数据 报协议( UDP (User Datagram Protocol) ),是一个轻量级的、不可靠的、面向数据包的、无连接的协议。 在可靠性不那么重要时,可使用这种协议。 QUdpSocket QAbstractSocket 的子类, 妳可使用它来发送及接收 UDP数据包

这个类,最常见的用法是,使用 bind () 来绑定到某个地址和端口,然后调用 writeDatagram () readDatagram ()来传输数据。如果 妳想使用标准的 QIODevice 函数,例如 read ()、 readLine ()、 write (),那么, 妳就需要先调用 connectToHost ()来直接将套接字连接到某个主机。

每当 有数据包被写入到网络中去时,这个套接字就会发射 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 还支持 UDP 组播。使用 joinMulticastGroup () leaveMulticastGroup ()即可控制组员关系 ,使用 QAbstractSocket::MulticastTtlOption QAbstractSocket::MulticastLoopbackOption 来设置生存时间(TTL)和 环(loopback)套接字选项。使用 setMulticastInterface () 来控制要用来向外发送组播数据包的网卡,使用 multicastInterface ()来查询这个属性。

使用 QUdpSocket 还可以调用 connectToHost ()来建立与某个UDP 服务器的虚拟连接,然后 ,就可以调用 read ()和 write ()来交换数据,而无需再指定每个数据包的接收者了。

广播 发送者 广播接收 组播发送者 组播接收者 示例展示 了如何在应用程序中使用 QUdpSocket

参考 QTcpSocket


成员函数文档

bool  QUdpSocket:: joinMulticastGroup (const  QHostAddress  & groupAddress )

在由操作系统选择的默认网卡上加入到由地址 groupAddress 指定的组播组。 套接字必须处于 BoundState 状态,否则会出现错误。

注意 ,如果妳是要加入到某个 IPv4 组播组,那么 ,妳的套接字就不能使用IPv6 绑定 ( 也不能使用 QHostAddress::Any 来以双模式绑定 ) 。妳必须使用 QHostAddress::AnyIPv4

如果操作成功, 此函数会返回真( true );否则会返回假( false ),并且设置对应的套接字错误。

此函数是从Qt 4.8 开始引入的。

参考 leaveMulticastGroup ()

bool  QUdpSocket:: joinMulticastGroup (const  QHostAddress  & groupAddress , const  QNetworkInterface  & iface )

这是一个重载函数。

在网卡 iface 上加入由地址 groupAddress 指定的组播组。

此函数是从Qt 4.8 开始引入的。

参考 leaveMulticastGroup ()

bool  QUdpSocket:: leaveMulticastGroup (const  QHostAddress  & groupAddress )

在由操作系统选择的默认网卡上,退出由地址 groupAddress 指定的组播组。 套接字必须处于 BoundState 状态,否则会出现错误。

如果操作成功, 此函数会返回真( true );否则会返回假( false ),并且设置对应的套接字错误。

此函数是从Qt 4.8 开始引入的。

参考 joinMulticastGroup ()



bool  QUdpSocket:: leaveMulticastGroup (const  QHostAddress  & groupAddress , const  QNetworkInterface  & iface )

这是一个重载函数。

在网卡 iface 上退出由地址 groupAddress 指定的组播组。

此函数是从Qt 4.8 开始引入的。

参考 joinMulticastGroup ()


QNetworkInterface  QUdpSocket:: multicastInterface () const

返回用来 向外发送组播数据包的网卡。 这个,对应于IPv4 套接字的IP_MULTICAST_IF 套接字属性,以及IPv6 套接字的IPV6_MULTICAST_IF 套接字属性。如果之前 未设置网卡,则,此函数返回一个无效的 QNetworkInterface 套接字必须处于 BoundState 状态,否则会返回无效的 QNetworkInterface

此函数是从Qt 4.8 开始引入的。

参考 setMulticastInterface ()


void  QUdpSocket:: setMulticastInterface (const  QNetworkInterface  & iface )

将用来向外发送组播数据包的网卡设置为 iface 这个,对应于IPv4 套接字的IP_MULTICAST_IF 套接字选项,和IPv6 套接字的IPV6_MULTICAST_IF 套接字选项。 这个套接字必须处于 BoundState 状态,否则,此函数什么也不做。

此函数是从Qt 4.8 开始引入的。

参考 multicastInterface () joinMulticastGroup () leaveMulticastGroup ()



qint64  QUdpSocket::writeDatagram ( const char *  data qint64 size , const  QHostAddress  &  address quint16 port  )

data所指向的大小为size的数据报发送到地址为address的主机的port端口。如果成功,则返回已发送的字节数;否则返回-1。

数据报永远会作为一整块发送出去。一個数据报的最大长度是与平台有关的,但是有可能小到8192 字节。如果数据报太长,那么这个函数会返回-1,并且 error ()会返回 DatagramTooLargeError

通常不建议发送长度超过512 字节的数据报,∵,即使它们发送成功咯,也有可能在这個过程中被IP 层分片咯。

警告: 在一個已连接的UDP 套接字上调用这個函数可能会导致出错,因而导致数据包发送不成功。如果妳使用的是已连接的套接字,则应当使用 write ()来发送数据报。

参考 readDatagram () write ()

qint64  QUdpSocket::writeDatagram ( const  QByteArray  &  datagram , const  QHostAddress  &  host quint16 port  )

这是個重载函数。

将数据报datagram发送到地址为host的主机的port端口。

未知美人

2016-09-02

G20曾塌w旧自勤 「翻雅J 可澍寞彼禁境外炯站

2016-09-0219 39

@蜃嬴〕厂

71%

Your opinions
Your name:Email:Website url:Opinion content:
- no title specified

HxLauncher: Launch Android applications by voice commands

 
Recent comments
2017年4月~2019年4月垃圾短信排行榜Posted at:Thu Sep 26 04:51:48 2024
Qt5.7文档翻译:QWebEngineCookieStore类,QWebEngineCookieStore ClassPosted at:Fri Aug 11 06:50:35 2023盲盒kill -9 18289 Grebe.20230517.211749.552.mp4