[solved] QUdpSocket

Alles rund um die Programmierung mit Qt
Antworten
flownfluid
Beiträge: 80
Registriert: 6. Januar 2005 12:54

[solved] QUdpSocket

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

Zuletzt geändert von flownfluid am 24. Juni 2010 09:29, insgesamt 1-mal geändert.
flownfluid
Beiträge: 80
Registriert: 6. Januar 2005 12:54

Beitrag 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
Antworten