接收信息
cpp
void MainWindow::receiveMessages()
{
QHostAddress peerAddr;
quint16 peerPort;
while (udpSocket->hasPendingDatagrams()) {
/* udpSocket发送的数据报是 QByteArray类型的字节数组 */
QByteArray datagram;
/* 重新定义数组的大小 */
datagram.resize(udpSocket->pendingDatagramSize());
/* 读取数据,并获取发送方的 IP地址和端口 */
udpSocket->readDatagram(datagram.data(), datagram.size(), &peerAddr, &peerPort);
/* 转为字符串 */
QString str = datagram.data();
/* 显示信息到文本浏览框窗口 */
textBrowser->append("接收来自" + peerAddr.toString() + ":" + QString::number(peerPort) + str);
}
}
单发
cpp
void MainWindow::sendMessages()
{
/* 文本浏览框显示发送的信息 */
textBrowser->append("发送:" + lineEdit->text());
/* 要发送的信息,转为 QByteArray类型字节数组,数据一般少于 512个字节 */
QByteArray data = lineEdit->text().toUtf8();
/* 要发送的目标 Ip地址 */
QHostAddress peerAddr = IPlist[comboBox->currentIndex()];
/* 要发送的目标端口号 */
quint16 peerPort = spinBox[1]->value();
/* 发送消息 */
udpSocket->writeDatagram(data, peerAddr, peerPort);
}
广播
cpp
void MainWindow::sendBroadcastMessages()
{
/* 文本浏览框显示发送的信息 */
textBrowser->append("发送:" + lineEdit->text());
QByteArray data = lineEdit->text().toUtf8();
/* 广播地址,一般为 255.255.255.255,
* 同一网段内监听目标端口的程序都会接收到消息 */
QHostAddress peerAddr = QHostAddress::Broadcast;
/* 要发送的目标端口号 */
quint16 peerPort = spinBox[1]->text().toInt();
/* 发送消息 */
udpSocket->writeDatagram(data, peerAddr, peerPort);
}