QT5 UDP网络编程获取对方IP地址

tomzhch 2015-09-19 10:11:51
用如下代码接收数据包
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地址
...全文
1537 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
nbnbhnb 2017-02-03
  • 打赏
  • 举报
回复
请问最后怎么解决的,求指导
chzfmx 2015-11-03
  • 打赏
  • 举报
回复
引用 3 楼 dext 的回复:
QHostAddress peerAddress () const QString peerName () const quint16 peerPort () const
试了一下,udp方式下使用这三个方法貌似不行
dext 2015-09-21
  • 打赏
  • 举报
回复
QHostAddress peerAddress () const QString peerName () const quint16 peerPort () const
foruok 2015-09-19
  • 打赏
  • 举报
回复 1
你的代码里获取的是localAddress,不是对方的ip地址。获取对方地址,需要在读取时提供第三个参数,readDatagram的原型如下:
readDatagram(char * data, qint64 maxSize, QHostAddress * address = 0
tomzhch 2015-09-19
  • 打赏
  • 举报
回复
有人吗!!!???

16,817

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧