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.