Frage zum Empfang von UDP Paketen unter C++



  • Ich habe ein C++ Programm geschrieben, welches auf meinem Yocto Linux (auf einem Intel Edison) UDP Pakete annimmt. Das Problem, welches ich habe ist, dass viele
    der Pakete, die im Linux ankommen (ich prüfe dies mit TCPDump), nicht im C++ Programm ankommen. Ich verwende OSC für die Kommunikation.
    Dies ist mein Quellcode:

    #include <iostream>
    #include "../Shared/udp.h"
    #include "../Shared/oscpkt.h"
    
    using namespace std;
    using namespace oscpkt;
    
    void Pong()
    {
    	UdpSocket SocketReceive;
    	UdpSocket SocketSend;
    
    	int TimeOutMS = 1;
    	int PortReceive		= 7000;
    	int PortSend		= 7001;
    
    	string OscReceiveAddress = "/KV/UDPTest/Ping";
    	string OscSendAddress = "/KV/UDPTest/Pong";
    
    	// bind receive socket to receive port
    	SocketReceive.bindTo(PortReceive);
    
    	// bind send socket to send port
    	SocketSend.connectTo("192.168.1.7", PortSend);
    
    	// Initialize receiver
    	if (SocketReceive.isOk())
    	{
    		while (1)
    		{			
    			while(SocketReceive.receiveNextPacket(TimeOutMS))
    			{
    				PacketReader Reader;
    				Message* messageReceive;
    				Message messageSend;
    
    				Reader.init(SocketReceive.packetData(), SocketReceive.packetSize());
    
    				while (Reader.isOk() && (messageReceive = Reader.popMessage()) != 0)
    				{
    					if (messageReceive->match(OscReceiveAddress))
    					{
    						printf("Received Ping!\n"); 
    
    						int returnInt = 0;
    						messageReceive->match(OscReceiveAddress).popInt32(returnInt);
    
    						messageSend.init(OscSendAddress);
    						messageSend.pushInt32(returnInt);
    
    						PacketWriter Writer;		
    						Writer.addMessage(messageSend);
    
    						printf("Send pong! (seq.-nbr.: %i)\n", returnInt); 
    						SocketSend.sendPacket(Writer.packetData(), Writer.packetSize());
    					}
    				}	
    			}
    
    		}
    
    	}
    }
    
    int main(int argc, char *argv[])
    {
    
    	printf("Starting Test...\n");
    
    	Pong();
    
    	return 0;
    }
    

    Ich benutze hierfür die Bibliotheken OSCPKT und UDP (von derselben Seite).

    OSC ist dabei nur Nebensache. Die Frage ist eher, wo die UDP Pakete verschwinden. Ich weiß, dass UDP ein unzuverlässiges Protokoll ist, wo Pakete einfach verschwinden können. Aber das betrifft ja eher das Medium und nicht das Linux, oder? Gibt es irgendwelche Linux settings zu beachten?


Log in to reply