UDPSocket, Server empfängt nur über localhost



  • Hallo,

    ich habe (mal wieder) ein kleines Problem. Diesmal aber eher ein komisches.

    Ich habe mir, wie bereits in anderen Threads erwähnt einen UDPClient gebaut, der die Daten an einen Vala Server sendet.

    Der Client sieht wie folgt aus:

    void UDPClient::Send(std::vector<unsigned char> buff){
    
    	// JA das ist schlecht, ich war bis her nur zu Faul es anders zu machen -> Erstmal zum debuggen 
    	char data[buff.size()];
    	for(int i = 0; i < buff.size(); i++){
    		data[i] = buff.at(i);
    	}
    
    	sendto(_socket,data,buff.size(),0,(struct sockaddr *)&serverAdress,sizeof(serverAdress));
    
    }
    
    void UDPClient::CreateUDPClient(int port, const char* ip){
    
    	// Status ausgeben
    	std::cout << "\033[32m" << "[Status]" << " UDPClient erfolgreich erstellt! IP: " << ip << " Port: " << port << "\033[0m" << std::endl;
    
    	// Neuen Socket erstellen
    	_socket = socket(AF_INET,SOCK_DGRAM,0);
    
    	// Informationen übergeben
    	serverAdress.sin_family = AF_INET;
    	serverAdress.sin_addr.s_addr = inet_addr(ip);
    	serverAdress.sin_port = htons(port);
    
    	// Alles ok?
    	if(_socket == -1)
    	{
    		// Nicht gut!
    		throw THOMASException("Beim erstellen des Sockets ist ein Fehler aufgetreten");
    	}
    
    }
    

    Wenn die IP 127.0.0.1 ist, klappt alles wunderbar, sobald ich die IP 192.168.178.26 nutze, empängt der Server keine Bytes mehr. Woran könnte das liegen? Ich sehe mit Wireshark auch nichts über die Netzwerkkarte laufen, bei 127.0.0.1 allerdings schon (loopback)

    Dies müsste doch eig ohne Probleme gehen, oder?
    inet_addr(ip);

    Achja, beachtet den Code in Zeile 3-5 bitte nicht 😛
    Danke 🙂



  • Vermutlich ist dein UDP Server nur auf 127.0.0.1 gebunden.
    Binde den mal auf INADDR_ANY.



  • Es handelt sich um ein Vala Server, aber ich bin mir ziemlich sicher, dass es am Client liegt (C++).

    Habe in Beispielen im Internet gesehen, dass dort noch sin_zero benutzt wird um auf 16Bytes zu kommen bzw. in anderen getHostName(). Kann es daran liegen?



  • Waishon schrieb:

    Es handelt sich um ein Vala Server,

    k.A. was das ist. was ist das?

    Waishon schrieb:

    aber ich bin mir ziemlich sicher, dass es am Client liegt (C++).

    OK. kann sein. kann sein nicht.

    Waishon schrieb:

    Habe in Beispielen im Internet gesehen, dass dort noch sin_zero benutzt wird um auf 16Bytes zu kommen bzw. in anderen getHostName(). Kann es daran liegen?

    guter tip.
    ich persönlich nulle solche structs grundsätzlich bevor ich anfange reinzuschreiben.
    also als lokale variable grundsätzlich

    sockaddr_in addr = {};
    

    und scheiss auf den minimalen performance hit.
    kannst natürlich auch memset() dafür verwenden, aber warum umständlich wenns auch einfach geht.


Anmelden zum Antworten