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*/
}
}
Ich verwende bei unbekannten Adressen einen Broadcast. Dann kann man darauf reagieren. DHCP macht das ähnlich.
..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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.