简体   繁体   English

我无法通过带有 QUdpSocket 的 UDP 使用 QHostAddress::LocalHost 看到 IP 地址

[英]I can't see the ip address using QHostAddress::LocalHost through UDP with QUdpSocket

i'm planning do a little app desktop with Qt Creator.我打算用 Qt Creator 做一个小应用程序桌面。 I'm using QUdpSocket class to make a simple connection through UDP, in fact i used a test code i found on internet, but my problem is when i run the code and the console just show me the port and the message, not the ip address where come from the message.我正在使用 QUdpSocket 类通过 UDP 建立一个简单的连接,实际上我使用了我在互联网上找到的测试代码,但我的问题是当我运行代码时,控制台只显示端口和消息,而不是 ip来自消息的地址。 Could someone tell me what i'm doing bad?有人能告诉我我做错了什么吗?

The source reference is this来源参考是这个

This is the header file:这是头文件:

#ifndef PRUEBAUDP_H
#define PRUEBAUDP_H

#include <QObject>
#include <QUdpSocket>
#include <QDebug>

/*#include <QNetworkDatagram>
#include <QHostAddress>*/


class pruebaUDP : public QObject
{
  Q_OBJECT
public:
  explicit pruebaUDP(QObject *parent = nullptr);
  void mensajeSocket();

signals:

public slots:
void readyRead();

private:
  QUdpSocket *udpSocket;
};

#endif // PRUEBAUDP_H

This is the source file:这是源文件:

    #include "pruebaudp.h"

pruebaUDP::pruebaUDP(QObject *parent) : QObject(parent)
{
  udpSocket = new QUdpSocket(this);
  udpSocket->bind(QHostAddress::LocalHost, 1234);

  connect(udpSocket, SIGNAL(readyRead()),
          this, SLOT(readyRead()));
}

void pruebaUDP::mensajeSocket()
{
  QByteArray dato;
  dato.append("hola");
  udpSocket->writeDatagram(dato, QHostAddress::LocalHost, 1234);
}

void pruebaUDP::readyRead()
{
  QByteArray buffer;
  buffer.resize(udpSocket->pendingDatagramSize());

  QHostAddress sender;
  quint16 senderPort;
  udpSocket->readDatagram(buffer.data(), buffer.size(), &sender, &senderPort);

  qDebug() << "Desde: " << sender.toString();
  qDebug() << "mensaje del puerto: " << senderPort;
  qDebug() << "mensaje: " << buffer;
}

and this is the main file:这是主文件:

#include <QCoreApplication>
#include "pruebaudp.h"

int main(int argc, char *argv[])
{
  QCoreApplication a(argc, argv);
  pruebaUDP prueba;
 prueba.mensajeSocket();

  return a.exec();
}

This is a input screenshot:这是输入屏幕截图:

ip地址不显示

You use same socket for sending and receiving.您使用相同的套接字进行发送和接收。 Try to send data via other socket, ie尝试通过其他套接字发送数据,即

void pruebaUDP::mensajeSocket()
{
  QByteArray dato;
  dato.append("hola");
  static QUdpSocket * socket = new QUdpSocket(this);
  socket->writeDatagram(dato, QHostAddress::LocalHost, 1234);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM