IP Adresse von Binär in einen String umwandeln
-
Guten Abend,
ich habe eine Frage.wie kann ich es machen, das ich die IP Adresse vom Client bekomme der mir soeben Daten gesendet hat in einer TextForm??
umgekehrt ist es ja kein Thema:
struct sockaddr* addr; socklen_t addrlen; addr.sin_family = AF_INET; addr.sin_Port = htons(1500); addr.sin_addr.s_addr = inet_addr("192.168.0.1");
so kann ich ja nun z.B. in einer sendto funktion die sachen übergeben. dann sendet der einen string an 192.168.0.1:1500
so nun möchte ich dieses aber in einer recvfrom nutzen.
struct sockaddr* addr; socklen_t addrlen; addrlen=sizeof(addr); recvfrom(buffer,sizeof(buffer),0,addr,addrlen);
dann müsste ja theoretisch in " addr.sin_addr.s_addr " die IP stehen, nur leider in BenärForm. Aber wie bekomme ich daraus jetzt einen string in form von char* ??
Wenn ich falsch liege und es anders geht, dann korrigiert mich bitte.
Danke.
<edit=kingruedi>Code-Tags gefixt</edit>
-
inet_ntoa ist dein Freund
-
kannst du mir mal nen kleinen code schnipsel zukommen lassen ?
also ich erstelle ne sockaddr structur und lasse sie von recvfrom füllen
sockaddr* addr; socklen_t addrlen; addrlen=sizeof(addr); char *IP; recvfrom(socket,buffer,sizeof(buffer),0,addr,addrlen); IP = inet_ntoa(&addr.sin_addr.s_addr);
nur wie bekomm ich dann die ip raus?? denn das gibt ne Fehlermeldung.
-
wie kommst du denn auf diese syntax
IP = (char *)inet_ntoa(addr.sin_addr);
-
aus meinem buch, aber das passt wohl nich..
aber wenn ich es so schreibe
IP = (char*)inet_ntoa(addr.sin_addr);
bekomme ich diese Fehlermeldung:
In member function int CMySocket::SocketRecvFrom(int,char*,int,char*)
error: request for member sin_addr in addr, which is of non-class type sockaddr_in*addr ist ein struct sockaddr_in *addr;
-
ach, jetzt seh ich es erst
sockaddr addr; socklen_t addrlen = sizeof(addr); char *ipaddr = NULL; recvfrom(socket, buffer, sizeof(buffer), 0, &addr, &addrlen); ipaddr = inet_ntoa(addr.sin_addr);