void SeedUDPClientHandler::run() {
	
	Core::getInstance()->registerThread(this);

	//connect socket to client adress and port.
	if(mUdpSocket != 0) {
		delete mUdpSocket;
		mUdpSocket = 0;
	}
	mUdpSocket = new QUdpSocket();
	mUdpSocket->bind();
	mUdpSocket->connectToHost(mClientAddress, mClientPort);

	connect(mUdpSocket, SIGNAL(readyRead()),
          this, SLOT(datagramReceived()), Qt::DirectConnection);

	if(mClientRunner != 0) {
		delete mClientRunner;
	}
	mClientRunner = new SeedUDPClientHandlerRunner(this);
	mClientRunner->start();

	QThread::exec();

	delete mUdpSocket;
	mUdpSocket = 0;
}
Example #2
0
void Multicaster::readyRead()
{
    while (socket->hasPendingDatagrams()) {
        QByteArray datagram;
        datagram.resize(socket->pendingDatagramSize());

        QHostAddress senderAddr;
        quint16 senderPort;

        // Here it is assumed that if a datagram is fragmented, it can
        // be dismissed and treated as a UDP unreliability
        qint64 r = socket->readDatagram(datagram.data(), datagram.size(),
            &senderAddr, &senderPort);
        if (r != datagram.size())
        {
            // Ignore errors and datagrams of incorrect size.
            qDebug() << "Multicaster::readyRead()"
                << "readDatagram() returned" << r << ", but"
                << datagram.size() << "expected. Ignored.";
            return;
        }

        if (senderPort != settings.port) {
            // Ignore datagrams sent from unknown ports.
            qDebug() << "Multicaster::readyRead()"
                << "Received datagram from port" << senderPort
                << ", but expected port is" << settings.port
                << ". Ignored.";
            return;
        }

        if (senderAddr == ownIp) {
            // Ignore datagrams sent by this host to itself.
            return;
        }

        // Debug.
        if (settings.debugWasteEachNthDatagramReceived > 0)
        {
            static int count = 0;
            if (++count % settings.debugWasteEachNthDatagramReceived == 0)
            {
                DEBUG_LOG_WASTED("    " << datagram << "<-x-"
                    << qUtf8Printable(senderAddr.toString()));
                return;
            }
        }

        LOG("    " << datagram << "<---"
            << qUtf8Printable(senderAddr.toString()));

        emit datagramReceived(datagram, senderAddr.toString());
    }
}
void UdpCommunicationManager::onReadyRead()
{
    while (m_udpSocket->hasPendingDatagrams()) {
        QByteArray datagram;
        datagram.resize(m_udpSocket->pendingDatagramSize());
        QHostAddress sender;
        quint16 senderPort;

        m_udpSocket->readDatagram(datagram.data(), datagram.size(),
                                &sender, &senderPort);
        qWarning() << "received datagram: " << datagram << " from "<< sender << " "<< senderPort;
        emit datagramReceived(datagram);

    }
}
Example #4
0
void UdpSocket::readPendingDatagrams()
{
    while (_udp_socket.hasPendingDatagrams())
    {
        QByteArray datagram;
        datagram.resize(_udp_socket.pendingDatagramSize());
        QHostAddress sender;
        quint16 senderPort;
        _udp_socket.readDatagram(
                        datagram.data(),
                        datagram.size(),
                        &sender,
                        &senderPort);

        emit datagramReceived(datagram);
    }
}