用如下代码接收数据包
void ChatDialog::recv()
{
QByteArray datagram;
QHostAddress ip;
while (udpSocket->hasPendingDatagrams())
{
datagram.resize(udpSocket->pendingDatagramSize());
udpSocket->readDatagram(datagram.data(), datagram.size());
ip = udpSocket->localAddress();
QDataStream in(&datagram, QIODevice::ReadOnly);
in.setVersion(QDataStream::Qt_5_5);
QString recvText;
in >> recvText;
recvText = ip.toString() + " Say:" + recvText;
displayEdit->append(recvText);
}
}
获取发送方的ip地址时总是显示IPv6的地址,如何转换为IPv4的地址,比如从自己主机发送的数据,收到数据时应该显示的是
127.0.0.1
或者有没有办法从UDP的数据报中获得源主机的IPv4地址
------解决思路----------------------
你的代码里获取的是localAddress,不是对方的ip地址。获取对方地址,需要在读取时提供第三个参数,readDatagram的原型如下:
readDatagram(char * data, qint64 maxSize, QHostAddress * address = 0