Qt中提供了QUdpSocket支持Udp通信。
在Udp通信中,一个Udp对象绑定端口后即可收发数据。数据可以广播也可以单播放。比较简单。
帮助文档代码示例:
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);
}
}
示例代码:
//初始化
int port;
QUdpSocket *udpSocket;
port = 5555;
udpSocket = new QUdpSocket(this);
connect(udpSocket,&QUdpSocket::readyRead,this,&UdpClient::dataReceived);
bool result = udpSocket->bind(port);
if(!result){
QMessageBox::information(this,tr("error"),tr("udp socket create error"));
return;
}
//接收数据
void UdpClient::dataReceived(){
while(udpSocket->hasPendingDatagrams()){
QByteArray datagram;
datagram.resize(udpSocket->pendingDatagramSize());
udpSocket->readDatagram(datagram.data(),datagram.size());
QString msg = datagram.data();
receiveTextEdit->insertPlainText(msg);
}
}
//发送数据
if((length = udpSocket->writeDatagram(msg.toLatin1(),msg.length(),QHostAddress::Broadcast,port))!=msg.length()){
return;
}