Forum: PC-Programmierung UDP Client IP ändern


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Udo J. (udo_j)


Bewertung
-1 lesenswert
nicht lesenswert
Hallo zusammen,
ich habe folgendes Problem:
Wenn der UDP-Server noch keine Anfrage von einem Client bekommen hat, 
möchte ich eine bestimmte Client-IP (z.B. 192.169.40.160:4711) 
ansprechen!
Wie gebe ich die Client IP bei
der sendto(...) Anweisung ein?

Wenn der UDP-Server eine Anfrage bekommen hat kann ich eine Antwort 
senden.

Aber ich habe noch nicht genau verstanden wie ich an die IP und 
Port-Werte komme und sie verändern kann :-(

Geht dieses mit diesem UDP-Tool oder verfolge ich da den falschen 
Ansatz?

Vielleicht kann mir da ja jemand weiterhelfen, vielen Dank im voraus

/*_____________UDP_Server______________________*/
int udpSocket, nBytes;
char buffer[1024];
struct sockaddr_in serverAddr, clientAddr;
struct sockaddr_storage serverStorage;
socklen_t addr_size, client_addr_size;
char UDP_aktiv = 0;
char *IP;

/*_____Create UDP socket___________________*/
  udpSocket = socket(PF_INET, SOCK_DGRAM, 0);
  udpSocket2 = socket(PF_INET, SOCK_DGRAM, 0);
  /*Configure settings in address struct*/
  serverAddr.sin_family = AF_INET;   //UDP
  serverAddr.sin_port = htons(9034); //PORT:9034
  serverAddr.sin_addr.s_addr = inet_addr("192.168.40.4");//Server IP
  memset(serverAddr.sin_zero, '\0', sizeof serverAddr.sin_zero);

  clientAddr.sin_family = AF_INET; //UDP
  clientAddr.sin_port = htons(4711);  // this is where client is bound
  clientAddr.sin_addr.s_addr = inet_addr("192.168.40.160");
  memset(clientAddr.sin_zero, '\0', sizeof clientAddr.sin_zero);
/*-----------------------------------------*/

/*Bind socket with address struct*/
  bind(udpSocket, (struct sockaddr *) &serverAddr, sizeof(serverAddr));
  /*Initialize size variable to be used later on*/
  addr_size = sizeof serverStorage;
/*-------UDP-Server INI---End------------*/

void UDP_Server(){
     while(1){

nBytes = recvfrom(udpSocket,buffer,1024,0,(struct sockaddr 
*)&serverStorage, &addr_size);/*Schleife bis ein Zeichen kommt!*/

    std::cout <<buffer <<" <-UDP-Zeichen: "<<nBytes <<std::endl;

sendto(udpSocket,"#OK",3,0,(struct sockaddr *)&serverStorage, 
addr_size);/*<<<<-----Client IP ändern??

    std::cout << IP <<":"//Client IP und Port Info
              << ntohs(clientAddr.sin_port) <<std::endl;

UDP_aktiv =1;/*es ist etwas im buffer*/

    }
  }

von PittyJ (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ich verwende bei unbekannten Adressen einen Broadcast. Dann kann man 
darauf reagieren. DHCP macht das ähnlich.

von Gerald K. (geku)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht hilft die Beschreibung im Anhang weiter.

von Udo J. (udo_j)


Bewertung
0 lesenswert
nicht lesenswert
..Danke für die schnellen Antworten :-)
ich habe es so mal getestet:
clientAddr.sin_addr.s_addr = inet_addr("192.168.40.170");

sendto(udpSocket,"#OK",3,0,(struct sockaddr *)&clientAddr, 
sizeof(clientAddr));

da reagiert der Client leider nicht :-(
PS. das C++ Projekt läuft auf einem RasPi

von Udo J. (udo_j)


Bewertung
0 lesenswert
nicht lesenswert
..Hey noch mal vielen Dank für die INFOs
es geht jetzt :-) :-) :-)
G.Udo

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.