UDP-Telegramm: Wohin mit der Antwort des Servers???
-
Hallo,
ich brauch mal etwas Hilfe:
Mein Server empfängt über UDP-Telegramme Steuerbefehle (dies funktioniert auch ganz gut).
Jetzt soll er aber dem jeweiligenClient auch antworten. Doch ein Send muss ein connect vorangestellt sein. Doch wie bekomme ich die Adresse des zuvor sendenden Clients heraus.Einen Ausschnitt aus meinem kleinen Testprogramm habe ich unten gelistet.
Obwohl der Client sich auf einem anderen Rechner befindet meldet mein Programm:empfangen von 0.0.0.0
Hat jemand eine Idee?
Danke
Ulliif(bind(socket_data,(struct sockaddr*)&server,sizeof(struct sockaddr))==-1){ printf("bind() schlägt fehl\n"); exit(-1); } bytes = recv( socket_data, message, 512, 0); if (bytes ==-1) printf("Fehler im UDP-Telegramm\n"); message[bytes] = '\0'; printf("%d Zeichen: %s\n", bytes, message); printf("empfangen von %s (laenge=%d)\n",inet_ntoa(client.sin_addr), laenge); if ( connect(socket_data, (struct sockaddr*)&client, sizeof(client)) != 0 ) printf("FEHLER: Konnte keine Verbindung aufbauen\n"); else printf("Verbunden mit %s\n",inet_ntoa(client.sin_addr)); char buffer[] = "Willkommen zu dem Test-Server\r\n"; bytes = send(socket_data, buffer, strlen(buffer), 0);
-
ull1 schrieb:
Einen Ausschnitt aus meinem kleinen Testprogramm habe ich unten gelistet.
Obwohl der Client sich auf einem anderen Rechner befindet meldet mein Programm:empfangen von 0.0.0.0
Sehe ich das falsch oder wird Client in Deinem Codeschnipsel nirgendwo auch nur angerührt, vor der Ausgabe?! Dann kann da auch nichts anderes drinstehen als der Default
Schau Dir mal recvfrom an, dort kannst Du eine sockaddr-Struktur mit übergeben, dann wird sie auch gefüllt
-
Sorry, ich hatte bei dem vielen Probieren einen alten Stand kopiert,
die Ausgabe folgt natürlich auf:bytes = recvfrom( socket_data, message, 512, 0,(struct sockaddr*)&client, laenge);
War meine Vermutung denn richtig, dass recvfrom den Absender des Telegramms in der Variablen client speichert?
Danke und Grüsse
Ulli
-
Hi,
ja. Allerdings ist imho der letzte Parameter (laenge) falsch, das müsste ein Zeiger sein.
EDIT:
man: recvfrom
-
es funktioniert!
Der Teufel steckt manchmal im Detail,
ich hab bestimmt schon 5-6 Std. darauf verbraten.DAAAANKE!!!!
ulli