使用UDP实现发送和接收
接收信息
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);}
}
单发
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);
}
广播
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);
}