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; }
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); } }
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); } }