ich habe eine Klasse implementiert, welche UdpPakete verschicken soll.
Das funktioniert auch wunderbar, obwohl ein Aufruf von QUdpSocket::error() nach dem Versenden den Fehler "QAbstractSocket::UnknownSocketError" meldet.
Ob es funktioniert, habe ich mittels Wireshark auf nem' anderen Computer überprüft. Da kommen alle Pakete trotz Fehlermeldung wie erwartet an ^^
Hier der Code der Klasse:
Code: Alles auswählen
#include "UdpSender.h"
UdpSender::UdpSender(int iPort, QObject *parent)
:QObject(parent)
{
bool bResult = false;
QCoreApplication *pApp = QCoreApplication::instance();
bResult = connect(pApp,SIGNAL(aboutToQuit()),this,SLOT(closeSocket()));
m_iPort = iPort;
m_pSocket = NULL;
m_oIpAddress.clear();
m_oIpAddress.setAddress(ConnectionSetupDialog::getIpAddress());
}
UdpSender::~UdpSender()
{
delete m_pSocket;
}
void UdpSender::closeSocket()
{
m_pSocket->close();
}
void UdpSender::socketErrorSlot(QAbstractSocket::SocketError)
{
QString oErrorString = m_pSocket->errorString();
emit userMessage(CRITICAL,"Socket Error", oErrorString);
}
void UdpSender::hostIpAddressChangedSlot(QString oIpAddress)
{
m_oIpAddress.clear();
m_oIpAddress.setAddress(oIpAddress);
}
void UdpSender::sendDatagramSlot(QByteArray oDgrm)
{
bool bResult = false;
if(m_pSocket == NULL)
{
m_pSocket = new QUdpSocket();
qRegisterMetaType<QAbstractSocket::SocketError>();
bResult = connect(m_pSocket,SIGNAL(error(QAbstractSocket::SocketError)),this,SLOT(socketErrorSlot(QAbstractSocket::SocketError)));
}
else
{
//socket alread created, therefore nothing needs to be done here
}
m_pSocket->writeDatagram(oDgrm,m_oIpAddress,m_iPort);
qDebug() << m_pSocket->error();
emit datagramSent(oDgrm);
}
Gruß M@g