Seite 1 von 1

[solved] QUdpSocket

Verfasst: 23. Juni 2010 16:46
von flownfluid
Hallo Leute ich habe ein kleines Testprog geschrieben um auf einem Port Packete zu empfangen und um auf einem anderen Port was zu versenden über UDP

Um das ganze unter Linux zu testen brauche ich netcat dazu...

netcat-befehl um zu lesen : netcat -u rechnername -l -p 28181
netcat-befehl um zu schreiben : netcat -u rechnername 28180

Probleme:
- Mein Programm empfängt die gesendeten Packete. Jedoch wenn ich das ganze mit m_ReceivedSocket->bind(QHostAddress::LocalHost,28180) initialisiere funktioniert es nicht mehr???
- Es sendet nur das erste Packet und das zweite Mal sendet er genau nichts, wieso?
- Und auch hier sobald ich von Broadcast auf LocalHost wechsle funktioniert nichts mehr...

Hat da jemand eine Ahnung wieso?

Vielen Dank schon mal

Code: Alles auswählen

MyUdpTestProg::MyUdpTestProg()
{
  m_SendSocket = new QUdpSocket(this);
  m_ReceivedSocket = new QUdpSocket(this);

  connect(m_ReceivedSocket , SIGNAL(readyRead()) , this , SLOT(readReceviedSocket()));
  connect(m_ReceivedSocket , SIGNAL(error(QAbstractSocket::SocketError)) , this , SLOT(errorHandlingReceivedSocket(QAbstractSocket::SocketError)));
  connect(m_SendSocket , SIGNAL(readyRead()) , this , SLOT(readSendSocket()));
  connect(m_SendSocket , SIGNAL(error(QAbstractSocket::SocketError)) , this , SLOT(errorHandlingSendSocket(QAbstractSocket::SocketError)));

  m_ReceivedSocket->bind(28180);
}

void MyUdpTestProg::readReceviedSocket()
{
   QByteArray datagram;
   datagram.resize(m_ReceivedSocket->pendingDatagramSize());
   m_ReceivedSocket->readDatagram(datagram.data(), datagram.size());
   std::cout << "Data : " << datagram.data() << std::endl;


   readSendSocket();
   sleep(1);
   readSendSocket();
}


void MyUdpTestProg::readSendSocket()
{
  QByteArray datagram = "hallo";
  std::cout << "send hallo" << std::endl;
  m_SendSocket->writeDatagram(datagram.data() , datagram.size() , QHostAddress::Broadcast , 28181);
}


Verfasst: 24. Juni 2010 09:28
von flownfluid
Hat sich von alleine erledigt...

Das Problem lag bei netcat, netcat hat Probleme mit Broadcast und zweitens mit der Addresse 127.0.0.1 (Localhost). Ersetzt man Localhost durch seine eigene IP funktioniert es tadelos...

Gruss und Danke