UDP Client IP ändern

OP #6245472
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*/

    }
  }
OP #6245751
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

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.