Estoy tratando de obtener la dirección del cliente, pero no estoy seguro de cómo se puede convertir la estructura sockaddr a sockaddr_in?cómo se hace la estructura sockaddr a sockaddr_in - sockets de red C++ ubuntu UDP
struct sockaddr_in cliAddr, servAddr;
n = recvfrom(sd, msg, MAX_MSG, 0,(struct sockaddr *) cliAddr,sizeof(cliAddr));
//i tried this but it does not work
struct sockaddr cliSockAddr = (struct sockaddr *) cliAddr;
char *ip = inet_ntoa(cliSockAddr.sin_addr);
¡Gracias de antemano! :)
he encontrado preguntas que me trajeron a este paso: Getting IPV4 address from a sockaddr structure
En este momento, para evitar confusiones, esta es mi verdadera aplicación donde "ci" es un objeto para almacenar punteros como sockaddr_in.
/* receive message */
n = recvfrom(*(ci->getSd()), msg, MAX_MSG, 0,(struct sockaddr *) ci->getCliAddr(),ci->getCliLen());
char *ip = inet_ntoa(ci->getCliAddr().sin_addr);
voy a tener los siguientes errores:
udpserv.cpp:166: error: request for member ‘sin_addr’ in ‘ci->clientInfo::getCliAddr()’, which is of non-class type ‘sockaddr_in*’
Tu código ni siquiera compilará. Está asignando un puntero a una estructura, declara 'cliSockAddr' como un puntero. –
Lo que realmente está preguntando es el reverso de lo que dice en su título. – EJP