无法通过Qudpsocket接收数据报,而是将其发送为空

时间:2018-12-07 13:49:48

标签: c++ sockets udp qt5.5 qudpsocket

我有一个应用程序,接收udp数据并将其发送到其他地址和端口。应用程序必须将一个数据包发送到自身,但我无法使其正常工作(尽管所有其他数据包都可以正常工作)。 数据包已发送,但是当我尝试接收它时,我只得到一个空的数据报(我不发送,据我所知,此时此刻什么也没有发送)。永远不会收到正确的数据包。

我尝试通过一个套接字同时管理发送和接收,如果正确,我不确定。这是我的代码。

myClass::myClass(QObject *parent):
    QObject (parent)
{
  ///....
  //some code
  my_socket = new QUdpSocket(this);
  connect(my_socket, SIGNAL(readyRead()), this, SLOT(readMyDatagram()));
  ///....
  //some other code
}

void myClass::restartListening(quint16 _port)
{

    if (my_socket->state() != QAbstractSocket::UnconnectedState)
        {
            my_socket->abort();
        }
        
        if(!my_socket->bind(QHostAddress::Any, _port))
        {
            auto error = my_socket->errorString();
            return;
        }

}

void myClass::sendMyDatagram(const QByteArray& packet)
{

	if (my_socket->writeDatagram(packet, myadress, myport) == -1)
	{
		qWarning() << my_socket->errorString();
	}

}

void TheClass::readMyDatagram()
{
   QByteArray datagram;
   QHostAddress sender;
   quint16 senderPort;

    if (my_socket->hasPendingDatagrams())
    {
        while (my_socket->hasPendingDatagrams())
        {
            datagram.resize(my_socket->pendingDatagramSize());

            my_socket->readDatagram(datagram.data(), datagram.size(),
                                &sender, &senderPort);
        }
    }

    if (datagram.size() == 0)
    {
        qWarning() << my_socket->errorString();
    }
    else
    {
        emit newDatagram(datagram);
    }
}

因此,当更改要侦听的端口时,将调用restartListening()。我通过sendMyDatagram()发送数据包。发送的数据包在函数中不为空,然后正确调用readMyDatagram(),但始终为空(在datagram.resize(..)之后出现,我仔细检查了一下,所有端口都不同。做错了吗?

0 个答案:

没有答案