UDP通信
UDP(用户数据报协议)是一种轻量级、不可靠、面向数据报、无连接的协议。它可以在可靠性不重要的情况下使用。
QUdpSocket是QAbstractSocket的一个子类,允许您发送和接收UDP数据报。
使用此类最常见的方法是使用bind()绑定到地址和端口,然后调用writeDatagram()和readDatagram()/receiveDatagram()来传输数据。
如果要使用标准的QIODevice函数read()、readLine()、write()等,必须首先通过调用connectToHost()将套接字直接连接到对等机。
每次向网络写入数据报时,套接字都会发出bytesWrited()信号。如果只想发送数据报,则不需要调用bind()。
readyRead()信号在数据报到达时发出。在这种情况下,hasPendingDatagrams()返回true。调用pendingDatagramSize()以获取第一个挂起数据报的大小,并调用readDatagram()或receiveDatagram()来读取它。
**注意**:当您收到readyRead()信号时,应该读取一个传入的数据报,否则下一个数据报将不会发出此信号。
Example:
void Server::initSocket()
{
udpSocket = new QUdpSocket(this);//设置父对象
udpSocket->bind(QHostAddress::LocalHost, 7755);//绑定地址和端口
connect(udpSocket, &QUdpSocket::readyRead,
this, &Server::readPendingDatagrams);//读取数据
}
void Server::readPendingDatagrams()
{
while (udpSocket->hasPendingDatagrams()) {
QNetworkDatagram datagram = udpSocket->receiveDatagram();
processTheDatagram(datagram);
}
}
QUdpSocket还支持UDP多播。
使用QUdpSocket,还可以使用connectToHost()与UDP服务器建立虚拟连接,然后使用read()和write()交换数据报,而不必为每个数据报指定接收方。
广播发送器、广播接收器、多播发送器和多播接收器示例说明了如何在应用程序中使用qdpsocket。
使用joinMulticastGroup()和leaveMulticastGroup()控制组成员身份,使用QAbstractSocket::MulticastTplotation和QAbstractSocket::MulticastLoopbackOption设置TTL和环回套接字选项。使用setMulticastInterface()控制多播数据报的传出接口,使用multicastInterface()查询它。
另请参见qtcsocket和QNetworkDatagram。