UDP Socket



  • Hallo Zusammen!

    Möchte über Ethernet UDP Pakete verschicken. Verwende dazu die Funktionen "sendTo" und "recvFrom"

    "sendTo" funktioniert wunderbar. nur das aufrufen der Funktion "recvForm" macht mir große Probleme.

    .h file

    /*!
    		Read read up to bufferLen bytes data from this socket.  The given buffer
    		is where the data will be placed
    		\param buffer buffer to receive data
    		\param bufferLen maximum number of bytes to receive
    		\param sourceAddress address of datagram source
    		\param sourcePort port of data source
    		\return number of bytes received and -1 for error
    		\exception SocketException thrown if unable to receive datagram
    	*/
    	int recvFrom(void *buffer, int bufferLen, std::string &sourceAddress, unsigned short &sourcePort) throw(SocketException);
    

    Ich rufe die Funktion wie folgt auf:

    void receiverThread::run()
    {
    	try
    	{
    		socket = new UDPSocket(4444);
    		char testArray[400][200];
    		std::string sourceA;
    		unsigned short port;
    		qDebug() << "begin receiving";
    		socket->recvFrom(testArray[0],4, sourceA, port);
    		qDebug() << "out of loop";
    
    	}
    	catch(SocketException s)
    	{
    		qDebug() << s.what();
    	}
    	delete socket;
    	socket = 0;
    }
    

    Dies lässt sich ohne probleme compilieren, nur leider wird die funktion "recvFrom" nicht mehr verlassen, wenn ich von einem anderen PC mit "sentTO" Daten versende. "sendTo" weis ich das sie funktioniert da ich mit Wireshark den Traffic anschau, und die versendeten UDP-Datenpakete ankommen.
    Ich hab natürlich auch darauf geachtet, dass der Destinationport von "sendTo" mit dem SourcePort von "recvFrom" übereinstimmt.
    Ich hab diese Funktion auch schon in anderen Projekten implementiert, also sowohl "sendTo" als auch "recvFrom" funktionieren. Daher muss !!!Meiner Meinung nach!!! der Fehler bei der Übergabe der Parameter bei der Funktion "recvFrom" liegen.
    Ich programmiere noch nicht so lange, deswegen hoffe ich auf euch! Bin für jeden Rat dankbar
    Danke im Voraus, pfu



  • bei sendTo musst du die adresse angeben wo der recv port angebunden ist
    recvFrom filtert nach allen packeten die mit der eingetragenen adresse übereinstimmen, wenn sendTo und recv dieselbe addresse haben kann das nur schiefgehn.

    versuch einfach mal recvfrom durch recv zu ersetzen oder versuch die ABSENDER adersse das sollte gehn



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Andere GUIs - Qt, GTK+, wxWidgets verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten