一、总结#
UDP
就像写信,可能会丢包
Linux UDP
通信过程
Qt UDP
通信过程
- 支持多路组播:D 类地址
- 局域网广播 IP: 255.255.255.255
二、每个实例都可以是服务端#
setWindowTitle(QString("服务器端口为:%1").arg(port));
udpSocket = new QUdpSocket(this);
// 只需要绑定端口号,不用开启监听
udpSocket->bind(port);
connect(udpSocket, &QUdpSocket::readyRead,[=](){
char buf[1024] = {0};
QHostAddress clientAddr; // 发送方 IP
quint16 clientPort; // 发送方 Port
qint64 len = udpSocket->readDatagram(buf, sizeof (buf), &clientAddr, &clientPort);
qDebug() << "接收到" << len;
if(len > 0){
QString str = QString("[%1:%2] %3").arg(clientAddr.toString()).arg(clientPort).arg(buf);
ui->textEditRead->append(str);
}
});
QString ip = ui->lineEditIP->text();
int port = ui->lineEditPort->text().toInt();
QString str = ui->textEditWrite->toPlainText();
// 注意:使用 QByteArray 传递,通过.data()转为char*后中文乱码
udpSocket->writeDatagram(str.toUtf8(), QHostAddress(ip), port);
udpSocket->disconnect();
udpSocket->close();